zoukankan      html  css  js  c++  java
  • var和ES6的let

    来源自:http://www.jstips.co/zh_cn/javascript/keyword-var-vs-let/ 

    特此做个笔记

    概述

    • 通过 var 定义的变量,它的作用域是在 function 或任何外部已经被声明的 function,是全域的 。
    • 透過 let 定义的变量,它的作用域是在一個块(block)。
    function varvslet() {
      console.log(i); // i 是 undefined 的,因为变量提升
      // console.log(j); // ReferenceError: j 没有被定义
    
      for( var i = 0; i < 3; i++ ) {
        console.log(i); // 0, 1, 2
      };
    
      console.log(i); // 3
      // console.log(j); // ReferenceError: j 没有被定义
    
      for( let j = 0; j < 3; j++ ) {
        console.log(j);
      };
    
      console.log(i); // 3
      // console.log(j); // ReferenceError: j 没有被定义
    }

    详细的区别

    • 变量提升

      let 不會被提升到整个块的作用域。相比之下,var 可以被提升。

      console.log(c); // undefined。因为变量提升
      var c = 2;


      console.log(b); // ReferenceError: b 没有被定义
      let b = 3;


    循环中的闭包

    let 在每次循环可以重新被 bind,确保在它之前结束的循环被重新赋值,所以在闭包中它被用來避免一些问题。

    for (var i = 0; i < 5; ++i) {
      setTimeout(function () {
        console.log(i); // 输出 '5' 五次
      }, 100);  
    }

    使用 let 替换 var

    // print 1, 2, 3, 4, 5
    for (let i = 0; i < 5; ++i) {
      setTimeout(function () {
        console.log(i); // 输出 0, 1, 2, 3, 4
      }, 100);  
    }

    我们应该用 let 替代 var 嗎?

    不是的,let 是新的块作用域。语法强调在 var 已经是区块作用域时時,let 应该替换 var ,否则请不要替换 varlet 改善了在 JS 作用域的选项,而不是取代。var 对于变量依旧是有用的,可被用在整個 function 之中。

    let 兼容性

    • 在 server 端,比如 Node.js,你现在可以安心的使用 let

    • 在 client 端,通过 transpiler(比如 Traceur),可以安心的使用 let 语法。否则请在这里确认你的浏览器是否支持。




  • 相关阅读:
    获取路径的方式
    读取XML文件(XmlNode和XmlElement区别)
    jQuery 选择器大全
    JS中Null与Undefined的区别
    浅谈JS中的!=、== 、!==、===的用法和区别
    sql面试 查找每个班级的前5名学生(取分类数据的前几条数据)
    C#动态方法调用
    C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic
    前言2
    2019-1-17 前言 C#高级编程(第11版)
  • 原文地址:https://www.cnblogs.com/djlele/p/8038186.html
Copyright © 2011-2022 走看看