nodejs 块 作用域 left

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

  Node v4这个版本是Nodeiojs合并后发布的首个稳定版本,并且为开发者带来了大量的ES6语言扩展。了解 Node.js中包括的ES6语言扩展。本课将会为你介绍如何使用这些新特性。

  Node.js 4.0.0 可以让您享受最尖端的技术,保持项目的先进性。其中对 v8 的升级几乎做到了与 Chromium / Google Chrome 同步,达到了 4.5.x,它提供了很多新的语言功能。ECMA-262JavaScript 语言规范的最新版本,而且好多新特性数都是开箱即用的。这些新特性包括:

  • classes - 各种 ‘类’,再也无需用 CoffeeScript 的语法糖写类了

  • generators - 未来的.js 代码中将有无数生成器,不学一点就看不懂 JS 代码了哦

  • collections - 集合、映射、弱集合、弱映射

  • arrow functions - 箭向函数

  • block scoping - 使用 let 、const 作用域,块辖域

  • template strings - 模板字串

  • promises - 用标准化了的方法进行延迟和异步计算

  • symbols - 唯一的、不可修改的数据



  • 严格模式

  •   严格模式在语义上与正常的JavaScript有一些不同。 首先,严格模式会将JavaScript陷阱直接变成明显的错误。其次,严格模式修正了一些引擎难以优化的错误:同样的代码有些时候严格模式会比非严格模 式下更快。 第三,严格模式禁用了一些有可能在未来版本中定义的语法。

  •   因为我们ECMAScript 6中的一些特性,必须在严格模式下,才可以使用,而不报错。

  • 严格模式可以应用到整个script标签或某个别函数中。

  • 为整个script标签开启严格模式, 需要在所有语句之前放一个特定语句 "use strict"; (或 'use strict';)

  • "use strict";
    let v = "Hi!  I'm a strict mode script!";
    console.log(v) ;


  • 同样的,要给某个函数开启严格模式,得把 "use strict";  (或 'use strict'; )声明一字不漏地放在函数体所有语句之前。


  • function strict()
    {
        // 函数级别严格模式语法
        'use strict';
        return "Hi!  I'm a strict mode function!" ;
    }
    function notStrict() {
        return "I'm not strict.";
    }

let 允许把变量的作用域限制在块级域中。与 var 不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。

let vs var

let的作用域是块,而var的作用域是函数

'use strict';
var a = 5;
var b = 10;
if (a === 5) {
    let a = 4; // The scope is inside the if-block
    var b = 1; // The scope is inside the function
    console.log(a);  // 4
    console.log(b);  // 1
}
console.log(a); // 5
console.log(b); // 1

let在循环中

可以使用let关键字绑定变量在循环的范围而不是使用一个全局变量(使用var)定义。

'use strict';
for (let i = 0; i < 10; i  ) {
    console.log(i); // 0, 1, 2, 3, 4 ... 9
}
//console.log(i); // i is not defined

上面报错,因为变量i不存在于for语句外的作用域中。let创建块级作用域变量的,使用var创建一个全局变量。