zoukankan      html  css  js  c++  java
  • JS let, var, const的用法以及区别

    本文摘自多位前辈的博文,另外还有一些我的多余补充,摘自地址已补充。非常感谢各位前辈。仅以笔记学习为目的!

    深入学习ES6的知识还请访问阮一峰老师的ES6教程

    如果不使用let或者const,在JS只有函数作用域全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

    1. var声明语句

    摘自:https://blog.csdn.net/weixin_44939019/article/details/99843495

    var声明语句声明一个变量,并且可选的将它初始化为一个值。

    • 声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的(作为window的属性存在),例如:
    function x() {
      y = 1;   // 在严格模式(strict mode)下会抛出 ReferenceError 异常
      var z = 2;
    }
    
    x();
    
    console.log(y); // 打印 "1"
    console.log(z); // 抛出 ReferenceError: z 未在 x 外部声明
    
    
    • 非声明全局变量外部函数作用域
    var x = 0;  // x是全局变量,并且赋值为0。
    
    console.log(typeof z); // undefined,因为z还不存在。
    
    function a() { // 当a被调用时,
      var y = 2;   // y被声明成函数a作用域的变量,然后赋值成2。
    
      console.log(x, y);   // 0 2 
    
      function b() {       // 当b被调用时,
        x = 3;  // 全局变量x被赋值为3,不生成全局变量。
        y = 4;  // 已存在的外部函数的y变量被赋值为4,不生成新的全局变量。
        z = 5;  // 创建新的全局变量z,并且给z赋值为5。 
      }         // (在严格模式下(strict mode)抛出ReferenceError)
    
      b();     // 调用b时创建了全局变量z。
      console.log(x, y, z);  // 3 4 5
    }
    
    a();                   // 调用a时同时调用了b。
    console.log(x, z);     // 3 5
    console.log(typeof y); // undefined,因为y是a函数的本地(local)变量。
    
    

    全局变量也可以通过window.xxx调用,在方法体中局部变量与全局变量同名的话,优先使用局部变量,所以可以通过window.xxx调用全局变量

    2. let声明语句

    摘自:https://es6.ruanyifeng.com/#docs/let

    在ES6之前,我们都是用var来声明变量,而且在JS只有函数作用域全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。
    所以ES6后出现let,就是为了解决块级作用域的变量问题。
    例如:

    { 
      var i = 9;
    } 
    console.log(i);  // 9
    

    ES6新增的let,可以声明块级作用域的变量。

    { 
      let i = 9;     // i变量只在 花括号内有效!!!
    } 
    console.log(i);  // Uncaught ReferenceError: i is not defined
    
    • let 配合for循环的独特应用(注意JS中for循环的特性)
    • let没有变量提升与暂时性死区
    • let变量不能重复声明
    示例

    摘自:https://blog.csdn.net/weixin_44939019/article/details/99843495

    function varTest() {
      var x = 1;
      if (true) {
        var x = 2;  // 同样的变量!
        console.log(x);  // 2
      }
      console.log(x);  // 2
    }
    
    function letTest() {
      let x = 1;
      if (true) {
        let x = 2;  // 不同的变量
        console.log(x);  // 2
      }
      console.log(x);  // 1
    }
    
    

    3. const声明语句

    摘自:https://es6.ruanyifeng.com/#docs/let

    const声明一个只读的常量。一旦声明,常量的值就不能改变,并且必须声明的同时初始化。

    const PI = 3.1415;
    PI // 3.1415
    
    PI = 3;
    // TypeError: Assignment to constant variable.
    const foo;
    // SyntaxError: Missing initializer in const declaration
    

    另外,constlet的特性完全一样

    参考
    https://www.cnblogs.com/fly_dragon/p/8669057.html
    https://zhidao.baidu.com/question/329685205173520085.html
    https://www.cnblogs.com/zhongxia-zx/p/12019116.html

  • 相关阅读:
    JQuery EasyUI属性和常见用法
    iOS 设置随意屏幕旋转
    iOS 打印系统字体
    iOS 实时监测网络状态(通过Reachability)
    UITableView上添加按钮,按钮点击效果延迟的解决办法
    ios下通过webservice获取数据
    (转发)InputAccessoryView的使用方法
    (转发)IOS动画中的枚举UIViewAnimationOptions
    (转发)IOS高级开发~Runtime(四)
    (转发)IOS高级开发~Runtime(三)
  • 原文地址:https://www.cnblogs.com/tfxz/p/12823668.html
Copyright © 2011-2022 走看看