let声明和块级作用域
2017-06-27 14:45
169 查看
let
let 可以看做像var一样的功能做申明的作用为什么要使用let
var a=1 if(true){ var a=2 } console.log(a) // 2
var a='博主大长腿' for(var i=0;i<a.length;i++){ **** } console.log(i) // 5
由上面两个例子可以看出,在块级作用域内申明的变量全部都进入父级或者全局的作用域内了,这样的话会产生大量的无用的变量,同时位后面挖坑,let就很好的解决了这一问题,其实我们可以把块级作用域下的let装化成es5的事项方式。如下:
//es6 {let a=1} //es5 (function(){ var a=1 } )()
这样的话则转化成了在函数作用域内生成一个变量,该变量不会邪路出去。
特点
1.无法变量提升console.log(a) var a=1 // undefined console.log(a) let a=1 // 报错
2.存在let不能重复定义
var a=1 var a=2 // 正常 let a=1 let a=2 // 报错 var a=1 let a=2 // 报错 let a=1 let a=2 //报错
只要同一作用域内存在相同变量被声明都会报错
3.只在块级作用域内生效
var a=1 if(true){ let a=2 } console.log(a) // 1
4.块级作用域内只能够拿到该作用域内声明的let变量,外部被忽略
var a='博主好帅' if(true){ a='博主不帅' let a } // 报错
博主不帅这个赋值语句报错(说明博主还是很帅的嘛),块级作用域内存在let定义,就算外部定义了也会报错。
注意:只有存在let声明的时候才会存在块级作用域
块级作用域与函数声明
举个栗子var function cc(){console.log('你好') } (function(){ if(false){ function cc(){console.log('你不好')} } cc() })()
上面的例子。早es5流浪器生成的结果为 ‘你不好’, 而在es6的流浪器中我们发现报错,cc不是一个函数,这就横有意思了
由于在es5中,声明函数会被提升到判断语句的外边,所以会得出结果
而在es6中,声明函数则跟var 一样,直接一个声明提升,var cc=undefined 提升到函数的最顶端,所得到该结果
应为这种问题的产生,所以我们在必须要在块级作用域内声明函数时,可以采用函数表达式来替代函数声明
在ES6中,声明函数必须在大括号的包裹下才能够生成,要不让会报错
'use strict' if(true){ function cc(){} } // 正常 'use strict' if(true) function cc(){} //报错
相关文章推荐
- ECMAScript 6(2)let和块级作用域
- 观察babel如何把let转化为var实现块级作用域
- ES6笔记(2)-- let的块级作用域
- ECMAScript6(ES6)标准之let、const关键字与块级作用域
- javascript中不存在块级作用域,所以要小心使用在块级作用域中的函数声明所带来的作用域混乱.
- JavaScript中用let语句声明作用域的用法讲解
- ES6 let,const命令和块级作用域
- ES6之let,const和块级作用域
- ES6之块级作用域与函数声明--读书笔记
- JavaScript中用let语句声明作用域的用法讲解
- 开始学习es6(二) let 与 const 及 块级作用域
- ES6-let带来了更简单的块级作用域
- ES6之let、const和块级作用域
- js 全局变量、局部变量的作用域;变量声明提前;无块级作用域
- 一个经典的js中关于块级作用域和声明提升的问题
- JS中的块级作用域,var、let、const三者的区别
- typescript学习(4)---块级作用域中可见的变量(let)
- ES6 let命令和块级作用域和const命令
- let、const、var和块级作用域
- 搭建Babel运行环境,Traceur ES6模板,块级作用域,let和const命令