最近在读《JavaScript高级程序设计(第4版)》这本书,与第三版相比,第四版进行了大量的更新。
在读这本书的过程中,我会记录下自己新的收获和学习总结,也希望对读者们有查缺补漏的意义。同时,也建议大家读一下这本红宝书第四版。
下面说记录一下var声明和let声明的区别。
- var声明的范围限制于函数作用域,而let声明的范围限制于块作用域。
function foo(){
var age = 12
name = 'Jane'
console.log(age) //12
}
console.log(age) //ReferenceError: age is not definded
console.log(name) // 'Jane' 在函数作用域声明变量没带var标识符,那么它就会变成全局变量。
if (true) {
var age = 18
let name = 'Jane'
}
console.log(age) // 18
console.log(name) //ReferenceError: name is not definded
- var声明会被提升到函数作用域的顶部,即变量提升;let声明没有变量提升。
console.log(age) // undefined
console.log(name) //ReferenceError: name is not definded
var age = 18
let name = 'Jane'
- 使用let声明的全局变量不会成为window的属性
var a = 18
let name = 'Jane'
console.log(window.a) //18
console.log(widdow.name) // undefinded
- 在for循环中的区别
使用var声明迭代变量时,迭代变量会渗透到循环体外部;而使用let声明迭代变量时,js引擎会为每次循环创建一个新的迭代变量。
for(var a = 0; a<4; a++) {
setTimeout( () => console.log(a)) //4 4 4 4 ,前面循环赋的值被最后一次循环的赋值所覆盖。
}
console.log(a) // 4
for(let a = 0; a<4; a++) {
setTimeout( () => console.log(a)) //0 1 2 3
}
console.log(a) // ReferenceError: a is not definded
网友评论