let语法特性

  • 形成块级作用域
for (let i=0;i<3;i++) {
  let i='abc';
console.log(i);
}
//abc
//abc
//abc

这里循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。
输出3次abc,表明函数内部变量i和循环语句中的i是分离的。

  • 不存在变量提升
console.log(foo); //undefined
var foo=2;

//let 情况
console.log(bar); //ReferenceError
let bar=2;
  • 暂时性死区(temporal dead zone)
    如果区块中存在let和const命令,则这个区块不需等到代码执行到命令那一行就形成封闭作用域
var tmp=123;
if (true) {
  tmp='abc'; //ReferenceError
  let tmp;
}

在块内,使用let声明变量前,该变量都是不可用的。

function bar(x = y, y = 2) {
  return [x, y];
}

bar(); // 报错

参数x默认值等于另一个参数y,而此时y还没有声明,属于”死区“。

  • 不允许在相同作用域内重复声明同一个变量
// 报错
function () {
  let a = 10;
  var a = 1;
}

// 报错
function () {
  let a = 10;
  let a = 1;
}

//函数内部也不可以
function fn (arg) {
  let arg; //报错
}
function fn (arg) {
  {
    let arg; //不报错
  } 
}


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

推荐阅读更多精彩内容

  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 1,658评论 0 2
  • let 和 const 命令 let 命令 块级作用域 const 命令 顶层对象的属性 gl...
    安小明阅读 1,003评论 0 0
  • 本文属个人笔记,不做详解,仅供参考! let命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于...
    R_yan阅读 29,193评论 6 18
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    卞卞村长L阅读 632评论 0 0
  • 时间过得真快。 去年的今天,我的社交媒体圈子里一片打铁声,一年之后,又变成一片声情并茂的怀念,恍惚之间,就像把我带...
    ThuleWang阅读 240评论 0 0