博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es6
阅读量:6667 次
发布时间:2019-06-25

本文共 1092 字,大约阅读时间需要 3 分钟。

基本语法

{ let a = 10; var b = 1;}b // 1a // ReferenceError: a is not defined.

在代码块中声明了a,b。然后a is not defined.这是因为let命令只在对应的代码块中有效,我们在外部去引用它,就会报错。这就是let的块级作用域的效果,如果不太清楚什么是块级作用域。我们来看下面的例子。

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

i在for循环中定义的是全局变量。我们在调用函数时。函数内部的i引用的是全局的i,所以打印出来的 是10. 我们之前是这样解决的

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

使用了立即执行函数将i的值传入了内部的函数,这样内部的函数就能够获取到对应的i。

我们用let来代替var,最后输出的是 6。

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

因为我们每一次的循环都生成了一个新的块级作用域,内部保存着i的值,所以就会打印出6.

let不存在变量提升

console.log(a);   console.log(b);   var a=0;//undefined   let b=0;//ReferenceError: b is not defined

TDZ(暂时性死区) let命令在块级作用域中,即使不存在变量提升,它也会影响当前块级作用域,即绑定在了当前作用域。在作用域中引用外部的变量将会报错。

var a=10;  {      console.log(a);  //ReferenceError: a is not defined      let a=10;  }

 

转载于:https://www.cnblogs.com/jassin-du/p/9472631.html

你可能感兴趣的文章
Codeforces Round #447 (Div. 2)
查看>>
Android的AutoCompleteTextView在API17高版本添加的setText函数在低版本系统居然能正常调用?官方文档是不是不靠谱了?...
查看>>
12.1 动态内存与智能指针(1)
查看>>
MySQL两大存储引擎InnoDB与MyISAM
查看>>
字符型和数值类型的数据转换方法
查看>>
设计模式-工厂模式简单理解
查看>>
委托与事件
查看>>
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
查看>>
Shell脚本学习之sed详解
查看>>
bzoj2085
查看>>
ajax C# webapi上传图片
查看>>
[转] nginx+FastCGI+c++
查看>>
Codeforces Round #533(Div. 2) D.Kilani and the Game
查看>>
iOS-方法之+ initialize 与 +load
查看>>
cordova iOS blank iframe iphone iframe 白屏 ios iframe 白屏
查看>>
C++ QT中自定义控件的简单创建
查看>>
SVN自动更新测试服务器工作副本(C#写winform程序实现)
查看>>
CSS3:优雅地绘制不规则ICON
查看>>
视觉工程师必须知道的工业相机50问,绝对干货!(转载)
查看>>
坦克大战0.1
查看>>