Js中的var let const区别

let, const是ES6中才有的,为什么会加两个呢,一种可能的原因是var有bug,我自己就遇到过。下面简单讲下它们的区别

js中是没有局部作用域的:在JS函数中的var声明,其作用域是函数体的全部。

 for(var i=0;i<10;i++){
          var a = '1';
    }

    console.log(a);
undefined
1

可以看到即使在循环外面,a变量仍然能获取到。这导致了一种问题就是当在函数外定义的变量,如果你在某个函数内部又重新定义了,可能会导致后面在全局使用是提示变量未定义。这个非上面的原因 能解释,我也不清楚具体原因。

另一个例子:

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

5

浏览器没有输出0,1,2,3,4而是输出了5个5, 这是因内部共享同一个i,导致只有一个I,循环结束时i为3。这个问题在python在某种情况下好像也能发生,但记不清了。

因为这个原因,let便有了用武之地:

let声明的变量拥有局部(块级)作用域

let声明的全局变量不是全局对象的属性

形如for (let x...)的循环在每次迭代时都为x创建新的绑定

用let重定义变量会抛出一个语法错误

而Const是干嘛的呢?

const 就是用来定义常量的

上一篇:Python 解压缩

下一篇:使input标签不可编辑的三种方式