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} //不在同一作用域了

     

  • 相关阅读:
    HDU2586 How far away?(tarjan的LCA)
    You Raise Me Up
    POJ2891 Strange Way to Express Integers(中国剩余定理)
    POJ2142 The Balance(扩展欧几里得)
    HDU 1166模仿大牛写的线段树
    NetWord Dinic
    HDU 1754 线段树裸题
    hdu1394 Minimum Inversion Number
    hdu2795 Billboard
    【完全版】线段树
  • 原文地址:https://www.cnblogs.com/cheeseCatMiao/p/7953558.html
Copyright © 2011-2022 走看看