深入理解ES6一

let声明

  1. Es6中引入块级声明,let声明的变量作用域限制在代码块中;
  2. let声明不会被提升;
  3. 在同一作用域中不能用let重复定义已经存在的标识符,会抛出错误。

const声明

  1. const声明的变量作用域也会限制在代码块中;
  2. const声明的是常量,其值一旦被设定后不可更改,每个通过const声明的常量必须进行初始化(赋值)
  3. const声明不允许修改绑定,但允许修改值;例如const声明对象,对象的值是可以修改的

临时死区的存在

  • 临时死区(temporal dead zone)TDZ用来描述letconst的不提升效果;
  • var声明不同,letconst声明的变量不会被提升到作用域的顶部,在javascript引擎扫描代码的时候会将letconst的声明放到临时死区中

循环中的块级作用域

  • 常见的循环错误;var声明是全局变量
var funcs = [];
for(var i=0;i<10;i++) {
    funcs.push(function() {
        console.log(i);
    })
}
funcs.forEach(funcion(func) {
    func(); //输出10次10 
})
  • 使用闭包解决这个问题
var funcs = [];
for(var i=0;i<10;i++) {
    funcs.push((function(value){
        // 变量i的值在传递到这个作用域是被赋值给了value;
        // 此时这个值就不会随外部变量而变化了;
        return function() {
            console.log(value);
        }
    })(i));
}
funcs.forEach(function(func) {
    func(); //输出0,然后是1,2直到9
})
  • 使用let声明简化
var funcs=[];
for(let i=0;i<10;i++) {
    funcs.push(function() {
        console.log(i);
    })
}
funcs.forEach(function(func) {
    func(); //输出0,然后是1,2直到9
})

全局作用域的绑定

  • var被用于全局作用域时,它会创建一个新的全局变量作为全局对象(浏览器环境中的window对象)的属性
  • 当在全局作用域中使用letconst,会在全局作用域下创建一个新的绑定,但是该绑定不会添加为全局对象的属性。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • let 和 const 命令 let 命令 块级作用域 const 命令 顶层对象的属性 gl...
    安小明阅读 4,551评论 0 0
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 5,538评论 0 2
  • 本文属个人笔记,不做详解,仅供参考! let命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于...
    R_yan阅读 29,224评论 6 18
  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    卞卞村长L阅读 3,762评论 0 0
  • 一直想写这件事情,在脑袋中想了好久,偶然又看到他的更新状态,让我有些感想,十多年的感情,说是痴情却道也是傻痴一枚,...
    艸雨田阅读 3,349评论 0 1

友情链接更多精彩内容