博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
let 命令 与 var的区别
阅读量:5995 次
发布时间:2019-06-20

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

ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

for循环的计数器,就很合适使用let命令。

for (let i = 0; i < 10; i++) {  // ...}console.log(i);// ReferenceError: i is not defined

如果使用var的话,就会输出10。

for (let i = 0; i < 3; i++) {  let i = 'abc';  console.log(i);}// abc// abc// abc

上面代码正确运行,输出了 3 次abc。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

var tmp = 123;if (true) {  tmp = 'abc'; // ReferenceError  let tmp;}

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

if (true) {    // TDZ开始    tmp = 'abc'; // ReferenceError    console.log(tmp); // ReferenceError      let tmp; // TDZ结束    console.log(tmp); // undefined      tmp = 123;    console.log(tmp); // 123}

ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。

{
{
{
{ {let insane = 'Hello World'} console.log(insane); // 报错}}}};

转载地址:http://fjqlx.baihongyu.com/

你可能感兴趣的文章
ProgressDialog使用总结
查看>>
安装完操作系统后,必备开发软件安装
查看>>
网络爬虫基本原理(一)
查看>>
让Win8自动登录免输入密码的小技巧
查看>>
MinGW 介绍
查看>>
注册域名到搜索引擎
查看>>
Eclipse中如何安装和使用GrepCode插件 (转)
查看>>
神经网络和机器学习、强人工智能
查看>>
JavaScript内部原理实践——真的懂JavaScript吗?(转)
查看>>
【DeepLearning】Exercise:Softmax Regression
查看>>
Android JNI入门第四篇——Android.mk文件分析
查看>>
Get a developer license for windows store app
查看>>
策略模式
查看>>
Android Studio导入第三方类库的方法
查看>>
zxing二维码
查看>>
.NET平台下的微信SDK(Rabbit.WeiXin)开源发布
查看>>
BZOJ1107 : [POI2007]驾驶考试egz
查看>>
div与span区别及用法
查看>>
Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
查看>>
【转载】COM小结
查看>>