let命令

来源:互联网 发布:nginx 经典书籍 编辑:程序博客网 时间:2024/05/16 12:41

基本用法

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

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

上面的代码块里,分别用letvar声明了2个变量。然后在代码块之外调用这个2歌变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明let声明的变量只在它所在的代码块有效。

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

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

上面代码中,计数器i只在for循环体内里有效,在循环体外引用就会报错。

不存在变量提升

let不像var那样会发生“变量提升”现象,所以,变量一定要在声明后使用,否则报错。

console.log(foo); // undefinedconsole.log(bar); // ReferenceErrorvar foo = 2;let bar = 2;

上面代码中,变量foovar命令声明,会发生变量提升,即脚步开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。变量barlet命令声明,不会发生变量提升,这表示在声明它之前,变量bar是不存在的,这是如果用到它,就会抛出一个错误。

暂时性死区

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

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

上面代码中存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定了这个块级作用域,所以在let声明变量之前,对tmp赋值会报错。

“暂时性死区”也意味着typeof不再是一个百分之百安全的操作:

typeof x; // ReferenceErrorlet x;

上面的代码中,变量x使用let命令声明,所以在声明之前都属于x的“死区”,只要有用到该变量就会报错。因此,typeof运行时就会抛出一个ReferenceError

作为比较,如果一个变量根本没有被声明,使用typeof反而不会报错:

typeof xxoo; // "undefined"

所以,在没有let之前,typeof运算符是百分之百安全的,永远不会报错。现在这一点不成立了,这样的设计是为了让大家养成良好的编程习惯,变量一定要在声明之后使用。

不允许重复声明

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

因此,不能在函数内部重新声明参数:

function func(arg){  let arg; // 报错}function func(arg){  {let arg; // 不报错}}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宜家水壶盖子有水怎么办 背滤鱼缸除油膜怎么办 书多了没地方放怎么办 学生在教室内丢手机怎么办 新车尾箱坏了怎么办 放书的箱子烂了怎么办 车钥匙锁后备箱里怎么办 布的收纳箱有味怎么办 车漆清漆层掉了怎么办 副驾驶储物箱卡子断了怎么办 玛莎拉蒂车门打不开怎么办 新买的水杯漏水怎么办 泰迪小狗掉毛怎么办 手机jlc调用接口状态异常怎么办 进门和厕所对着怎么办 p过的照片有竖条怎么办 当照片p出竖条纹怎么办 月子里落下脚心怕风怕凉怎么办 鞋胶把手粘住了怎么办 凉鞋魔术贴长了怎么办 新买的狗一直叫怎么办 刚买的幼犬老叫怎么办 狗狗什么都不吃怎么办 新买的吊扇风小怎么办 夜市卖果汁没电怎么办 榻榻米太长2米45怎么办 木质桌子黏黏的怎么办 白色塑料桌子染色了怎么办 3dmax模型变透明了怎么办 刚养的兔子不吃怎么办 熊猫兔不吃下喝怎么办 熊猫兔感冒了一直打喷嚏怎么办 兔子后腿骨断了怎么办 兔子的腿肿了怎么办 仓鼠喝了牛奶该怎么办 宠物兔不吃不喝怎么办 兔子把木屑吃了怎么办? 小车司机碰瓷大车司机怎么办 在淘宝买到假的护肤品怎么办 淘宝购物发现是假的怎么办 电脑键盘灯不亮不能打字怎么办