阮一峰老师开源作品

书上的示例代码可以通过 在线网站代码调试工具 JS Bin 调试。

作用域

作用域链

  • 每个变量或函数通过执行环境 (execution context) 定义了其有权访问的其他数据,决定了他们各自的行为;

  • 全局执行环境是最顶层的执行环境,根据宿主环境的不同,表示全局执行环境的对象也不同:在浏览器中为 window 或 self 对象,在 Node.js 中为 global;

  • 每个执行环境都有一个与之相关联的变量对象 (variable object) ,存储了改环境中定义的所有变量和函数;

  • 作用域(scope chain) 存储了与当前执行环境相关的所有变量对象,第一个为当前执行环境关联的变量对象,然后是包含环境的变量对象,直至全局执行环境的变量对象,即全局执行环境;

  • 在代码中查找变量的值称为变量解析(variable name resolution),查找顺序是沿作用域链一级一级向外搜索;

全局作用域

函数作用域

块级作用域

函数声明

  • ES5 规定函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明,但浏览器为兼容旧代码,仍允许在块级作用域中声明;

  • ES6 明确允许函数在块级作用域声明,但应尽量使用函数表达式形式,如下:

let f = function () {
    return a;
  };

let 相比较 var 的不同点

  • 只在它所在的代码块有效;

  • 只能先声明后使用,不存在变量提升;

  • 在其声明所在的代码块,不受外部影响,形成暂时性死区;

  • 不能重复声明;


拾柒_
87 声望1 粉丝