我试图理解ES6词法范围(使用节点运行时).考虑以下:
'use strict';
let x = 10;
function f() {
console.log(x);
console.log(y); // This should crash
}
let y = 5;
f();
Run Code Online (Sandbox Code Playgroud)
从O'Reilly的书"学习Javascript"中解释:
词法作用域意味着您定义函数的范围内的任何变量(与您调用它时相反)都在函数的范围内.
但是,当我运行此程序(通过节点)时,它输出:10 5
是不是调用console.log(y)打破了这里的词法范围规则?如果没有,为什么不呢?
编辑:为了将来参考,似乎教科书的作者(Learning Javascript 3rd Edition O'Reilly)最近在"已确认的勘误表"中将此示例列为错误.在http://www.oreilly.com/catalog/errata.csp?isbn=0636920035534