ES6中let

ES6里增加了一个let,可以在{}, if, for里声明。用法同var,但作用域限定在块级,let声明的变量不存在变量提升。

//--- 词法作用域
{
    let a = 10;
    var b = 10;
}
console.log(a);  //报错
console.log(b); //10

let声明的变量在作用域外是访问不到的

块级作用域 if

function getVal(bool){
  if(bool){
    let val = 'red';
    //访问到val
    return val;
  }else{
    //访问不到val
  }
  //访问不到val
}

块级作用域 for

var a = [];
for (var i = 0; i < 10; i++) {
    a[i] = function() {
        console.log(i);
    };
}
a[6](); //10
var a = [];
for (let i = 0; i < 10; i++) {
    a[i] = function() {
        console.log(i);
    };
}
a[6](); //6

//等价于
var a = [];
for (let i = 0; i < 10; i++) {
    a[i] = (function(i) {
        return function(){
          console.log(i);
       }
    })(i);
}
a[6](); //6

块级作用域,存的不是引用,直接是i的值
** 变量提升(先使用后声明)**

function do_something() {
    console.log(foo);
    var foo = 2;
}

变量val先使用后声明,输出undefined,也不报错。

function do_something() {
    console.log(foo);
    let foo = 2;
}
//报错

let定义变量不能重复声明

{
    let a = 10;
    var a = 1;
}
// 报错
{
    let a = 10;
    let a = 1;
}
//报错

let的声明的变量不会挂载到全局属性

var a = 1;
window.a; //1
let b = 1;
window.b; //undefined
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • let命令用于声明变量,在声明该变量的代码块内有效。不同于var方式声明的变量,var在函数内声明的变量在整个函数...
    mcknight阅读 3,418评论 0 1
  • 1、ECMAScript 和 JavaScript 的关系 ECMAScript 和 JavaScript 的关系...
    逍遥g阅读 1,287评论 0 0
  • let 和 const 命令 let 命令 块级作用域 const 命令 顶层对象的属性 gl...
    安小明阅读 4,525评论 0 0
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 5,529评论 0 2
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    卞卞村长L阅读 3,728评论 0 0