美文网首页
var和let声明的区别

var和let声明的区别

作者: 卿东望 | 来源:发表于2020-12-18 10:37 被阅读0次

最近在读《JavaScript高级程序设计(第4版)》这本书,与第三版相比,第四版进行了大量的更新。

在读这本书的过程中,我会记录下自己新的收获和学习总结,也希望对读者们有查缺补漏的意义。同时,也建议大家读一下这本红宝书第四版。

下面说记录一下var声明和let声明的区别。

  1. 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   
  1. var声明会被提升到函数作用域的顶部,即变量提升;let声明没有变量提升。
console.log(age) // undefined
console.log(name) //ReferenceError: name is not definded
var age = 18
let name = 'Jane'
  1. 使用let声明的全局变量不会成为window的属性
var a = 18
let name = 'Jane'
console.log(window.a) //18
console.log(widdow.name) // undefinded
  1. 在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

相关文章

网友评论

      本文标题:var和let声明的区别

      本文链接:https://www.haomeiwen.com/subject/pvkxnktx.html