zoukankan      html  css  js  c++  java
  • let & var 的区别

    在讲let命令之前,先来回顾一下var的一些特性和用法。

    var:用于声明变量的命令

    1、作用域:(ES5中仅有函数作用域&全局作用域)

    (1)如果在一个函数之内用var声明变量,则其在该函数内有效,其外部环境无法访问到这个变量,且该变量在函数内会覆盖全局变量的声明。

    1. var a = 6;
    2. function hh()
    3. {
    4. var a = 4;
    5. alert(a);
    6. }
    7. hh();//4
    8. alert(a);//6

    (2)如果一个变量在全局环境中声明,则其在整个window中有效。在ES5中,全局对象的属性与全局变量是等价的。

             window.a = 5; === var a =5;

    2、ES5中var声明的变量存在变量提升(仅是声明提升,赋值不提升),可允许变量在声明之前使用;

    1. alert(b);//undefined
    2. var b = 5;

             其执行顺序其实是:

    1.  var b;
    2.  alert(b);
    3.  b = 5;

    3、ES5中用var可以重复声明变量

    1. var c = 5;
    2. alert(c);//5
    3. var c = 10;
    4. alert(c);//10

    接下来讲let的特性与用法

    let:ES6中用于声明变量的新命令,其用法类似于var,但其声明的变量只在let命令所在的代码块内有效。

    (什么叫代码块?{}一个大括号内的内容即可为一个代码块)

    1、作用域:let命令所在的代码块

    1. {
    2. let a = 10;
    3. var b = 1;
    4. }
    5. a //ReferenceError: a is not defined
    6. b//1

    2、let不存在变量提升,变量一定要在声明之后使用,否则报错

    (暂时性死区:只要块级作用域内存在let命令,它所声明的变量就绑定了这个作用域,不在受外部影响,在代码块内,使用let命令声明变量之前,该变量都是不可用的)

    1. console.log(foo);//ReferenceError
    2. let foo = 2;

    3、let不允许在相同作用域重复声明同一个变量(包括不能在函数内部重新声明参数)

    1. let t = 5;
    2. alert(t);
    3. let t = 8;
    4. alert(t); VM51:3 Uncaught SyntaxError: Identifier 't' has already been declared
    1. let t = 5;
    2. alert(t);//5
    3. {let t = 8; alert(t);//8} //不在同一作用域了

     

  • 相关阅读:
    51nod 1122 机器人走方格 V4(矩阵乘法)
    51nod 1092 回文字符串
    51nod 1254 最大子段和 V2(递推)
    容斥原理求gcd为k的数对个数
    51nod 1115 最大M子段和 V3
    51nod 1053 最大M子段和 V2(贪心)
    洛谷P1792 [国家集训队]种树
    洛谷P1484 种树(反悔贪心,双向链表+堆)
    51 nod 1052 最大M子段和
    51 nod 1051 最大子矩阵和
  • 原文地址:https://www.cnblogs.com/cheeseCatMiao/p/7953558.html
Copyright © 2011-2022 走看看