美文网首页
JavaScript中var和let定义变量的区别

JavaScript中var和let定义变量的区别

作者: 不要和我名字一样 | 来源:发表于2017-03-27 14:52 被阅读33次

在ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
先看一段代码,用var定义变量:

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); 
Paste_Image.png
再看用let定义变量:
   let  a = [];
    for (let i = 0; i < 10; i++) {
        a[i] = function () {
            console.log("a[6]的值为:"+i);
        };
    }
    a[6](); 
Paste_Image.png
同样是两个for循环计数器,用var定义的输出的结果是10,而用let定义的输出结果是6.
原因就在于:
1、用var声明的变量,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。
2、用let声明的变量,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。

在用var声明变量时可以在声明之前使用,值为undefined,而let声明变量时,它所声明的变量一定要在声明后使用,否则报错。只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

相关文章

  • ES6基础—let与var/const/对象字面量的增强写法

    为了弥补JavaScript中var的缺陷,所以在ES6中有了let let与var的区别 1.let定义的变量存...

  • JavaScript中的var、let、const

    JavaScript中定义变量常量的方法有var、let、const,区别如下: var:作用域是函数体内,存在变...

  • es6

    1、let 和const(定义变量) (1)var 、let 、const的区别 a、作用域区别var 变量声明会...

  • js问题

    js中let和var定义变量的区别,主要体现在作用于的不同。 var定义的变量是全局变量或者函数变量。 let定义...

  • let 和 const;函数默认参数

    let let 和 var 一样, 也是是用来定义变量的。如 let 与 var 的区别 let 定义的变量的作用...

  • JavaScript中var和let定义变量的区别

    在ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。...

  • JS中var、let、const区别

    在javascript中有三种声明变量的方式:var let const。let var const的区别?var...

  • js中const,var,let区别

    在javascript中有三种声明变量的方式:var let const。let var const的区别?var...

  • js中的let和var

    [toc] js中let和var区别 1. 作用域不同 let定义的变量作用域仅限于定义该变量的代码块中。比如:i...

  • es6总结一

    es6基础 let和const命令 let和const用于声明变量let跟var的区别 1、let定义过的变量不能...

网友评论

      本文标题:JavaScript中var和let定义变量的区别

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