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

     

  • 相关阅读:
    当下流行的分布式文件系统大阅兵
    smb相关资料
    Linux下将多个静态库(.a)合并成一个静态库文件(.a)的命令操作,方法一
    IBInspectable的使用
    iOS开发拓展篇——如何把项目托管到GitHub
    iOS开发拓展篇-XMPP简单介绍
    iOS开发拓展篇—应用之间的跳转和数据传递
    使用NSURLSession获取网络数据和下载文件
    李洪强实现横向滚动的View<二>
    李洪强实现横向滚动的View<一>
  • 原文地址:https://www.cnblogs.com/cheeseCatMiao/p/7953558.html
Copyright © 2011-2022 走看看