首页 > 其他 > 详细

let 与var对比

时间:2019-12-02 17:04:59      阅读:87      评论:0      收藏:0      [点我收藏+]

1.var 定义的变量 会进行变量提升:

       如果变量声明在函数里面,则将变量声明提升到函数的开头

       如果变量声明是一个全局变量,则将变量声明提升到全局作用域的开头

即只要定义了 即使在定义之前使用也不会报错 ,而let 定义的不会,在定义之前使用将会导致报错

console.log(k)
console.log(x)
let x = 10
var k = ‘ddd‘

console将打印

     undefined

     Uncaught ReferenceError: Cannot access ‘x‘ before initialization

2.var 只有全局作用域和局部作用域之分,而let定义块级作用域 (var 定义的全局变量会自动添加到window上作为对象的属性)

for (var j = 0; j < 10; j++) {
   setTimeout(function() {
      console.log(j)
   })
}
//   10个10
//  下面可以正常访问 会污染全局变量
console.log(‘-------‘, j)
console.log(‘-------‘, window.j)

for (let i = 0; i < 10; i++) {
   setTimeout(function() {
      console.log(i)
   })
}
//   0---9分别被打印
//   Uncaught ReferenceError: i is not defined
console.log(‘-------‘, i)

3. var 可以被重新定义和赋值而let不行 对let进行重新赋值将会报错

let x = 10

let foo = () => {
      console.log(‘------------‘, x)
      // 不能被重新定义 下面将会报错
      let x = 20
      x++
}
// 不能被重新定义 下面将会报错 不论全局还是局部
let x = 1
foo()
var k = ‘444‘
var k = ‘kjk‘
console.log(k) //可以正常输出

  

let 与var对比

原文:https://www.cnblogs.com/xhliang/p/11971704.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!