【发布时间】:2017-02-08 17:27:56
【问题描述】:
当我使用 ES6 类语法时,未定义没有“let”或“var”声明的方法内的变量。但是,当使用常规对象语法时,它是被定义的。
为了说明问题,我在 Node v7.5.0 上运行以下代码:
class ES6Foo {
bar() {
var i = 5446;
console.log("i = " + i);
let j = 5446;
console.log("j = " + j);
k = 5446;
console.log("k = " + k);
}
}
foo = new ES6Foo();
foo.bar();
产生输出:
i = 5446
j = 5446
.../ES6Foo.js:10
k = 5446;
^
ReferenceError: k is not defined
at ES6Foo.bar
不使用类语法解决了这个问题:
var OldFoo = function() {}
OldFoo.prototype.bar = function() {
var i = 5446;
console.log("i = " + i);
let j = 5446;
console.log("j = " + j);
k = 5446;
console.log("k = " + k);
}
foo = new OldFoo();
foo.bar();
产生:
i = 5446
j = 5446
k = 5446
谁能解释这种行为?
【问题讨论】:
-
class中的代码使用严格模式执行。这禁止隐式全局变量。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
我认为您的第二个代码示例并没有解决问题,而是允许出现问题。
标签: javascript node.js ecmascript-6