前端面试葵花宝典

经典面试题:var、 let、 const 之间的区别

2022-10-19  本文已影响0人  小道小姐姐

题目:var let const 之间的区别

题解:

三个关键词都是用来声明变量的,其中var在ECMAScript所有版本中都可以使用,而constlet只能在ECMAScript6及更晚的版本中使用。

var vs let

const vs let

两个都是在ES6版本出生的,constlet基本相同,唯一一个重要区别是const声明变量时必须同时初始化,并可不能修改。注意const如果声明的是一个对象,那么不能更改的是对该对象的引用,也就是不能重新指向其他变量,但是修改对象内部属性const是管不着的。

const obj1 = {a: 1};
obj1.b = 2; // 不会报错
obj1 = {a: 1, b:2}; // TypeError: Assignment to constant variable.

衍生题

问:以下代码会输出什么?

for (var i = 0; i < 5; i++) {
    setTimeout(() => console.log(i), 0)
}

答:会打印出5个5,因为退出循环时变量i已经被赋值为5,执行超时逻辑时,每个回调函数都是指向那个已经变成5的i变量。

问:那么如何更改上面的代码使其挨个输出0,1,2,3,4呢?

答:只需把i的声明操作符改成let

for (let i = 0; i < 5; i++) {
    setTimeout(() => console.log(i), 0)
}

问:那么let是怎么做到的呢?

答:来看看babel将上一段代码转成es5后的样子:

es5.png

重新定义了一个函数,在循环中调用该函数,并将i作为函数参数传进去,这样,setTimeout执行时打印的是该函数的实参,而不再是for循环里变量i。

上一篇 下一篇

猜你喜欢

热点阅读