每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day5

tags: ItIron2021 Javascript

作者碎碎念

当时在用这一系列题目跑模拟面试活动时,在某个梯次有个参加的同学问了一个很好的问题。

Danny,现在不是都用const/let吗? var还有人在用吗? 如果没有,为什麽还要复习var相关的题目?

确实,现代网路开发你很少很少会看到有人用var(除非你是去翻一些套件的原始码),但很遗憾的是,即便许多玩意在开发时已经渐渐式微,但仍会出现在你的面试环节中。我当时办模拟面试的目的就是为了协助同学了解大致上面试会碰到的东西,因此虽然我自己开发也没在用了,但在选择题目时还是会忠实呈现我自己在面试中碰到的题目,再过几年这一系列文章也大概率会变得没有参考价值,但希望至少在这几年中还是可以帮到一些求职者?

前言

昨天我们探讨了hoist的概念,接下来的两天我们一样透过小弟我当时碰到的面试题目来复习一下吧! 放心,复习的文章都很短,在厕所的时间就可以看完的? 我们就马上开始吧!

本日题目与解释

请问下方程序码输出结果为何

let salary = "1000";

(function () {
  console.log("Origin salary was " + salary);
  
  var salary = "5000";
  
  console.log("My new salary is ", + salary);
})();

老样子,今天也来张不一样的防雷图

dog-think

我想既然已经有据透今天的题目与hoist相关,许多人看到以下的答案应该不会太意外了

Origin salary was undefined
My new salary is  5000

这个题目牵扯到作用域(scope)以及提升(hoist)的概念,多亏了Day1的文章,我们知道var宣告的变数是functional scope,那我们只要关心IIFE内的东西即可,最外围的let salary = "1000"可以直接忽略不记。接着配合昨天的内容,我们知道提升会先将宣告移置记忆体位置(或是你要说是该scope的最上层也行),且被提升的部分仅有宣告,赋值的行为并不会一并被提升,因此IIFE内其实会被解读为以下的程序码

(function () {
  var salary;
  console.log("Origin salary was " + salary);
  
  salary = "5000";
  
  console.log("My new salary is ", + salary);
})();

如此一来以上的输出结果就完全合理了吧! 是不是很简单呢?

本日核心观念与总结

核心观念

作用域(scope)、提升(hoist)

总结

  • 复习作用域与提升的概念

本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!


<<:  [06] [Flask 快速上手笔记] 05. 发送请求与文件上传

>>:  [ Day 05 ] JSX 语法

Day 30:Google Map 结合口罩资料 & 铁人赛最後一天

本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...

Chpater3 今天来学习画一棵树(IV)浅谈效能和演算法,以迭代取代递回吧!

昨天发完文後,觉得对於演算法还是心有不甘,便上网搜寻了一下,虽然没直接给到答案,间接的给了我一些大胆...

搜寻引擎优化入门篇:你不能不知道的响应式网页设计

随着行动浏览成为搜寻引擎主流,响应式网页设计也越来越重要,甚至能说在这几年,假设你的网页没有响应式设...

变数 基础

简单介绍一下变数在JS中的几个性质,之後的篇章会比较深入的讲解,这些性质背後的原因们 看变数的值,决...

【从零开始的 C 语言笔记】第二十一篇-continue & break

不怎麽重要的前言 到现在我们大概介绍完了所有的回圈语法,大家可以依照自己的需要使用不同的回圈。 这次...