1 javascript node.js ecmascript-6
当我使用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();
Run Code Online (Sandbox Code Playgroud)
产生输出:
i = 5446
j = 5446
.../ES6Foo.js:10
k = 5446;
^
ReferenceError: k is not defined
at ES6Foo.bar
Run Code Online (Sandbox Code Playgroud)
不使用类语法解决了这个问题:
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();
Run Code Online (Sandbox Code Playgroud)
生产:
i = 5446
j = 5446
k = 5446
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?
当我使用ES6类语法时,在没有'let'或'var'的情况下声明的方法内的变量是未定义的.
实际上,这是未宣布的.这就是你得到例外的原因.
但是,在使用常规对象语法时,会定义它.
那是因为ES6类方法自动以严格模式运行,您的常规对象语法只能以草率模式运行.(它不应该!"use strict"模式到处都是!)
分配给未声明的标识符将隐式创建一个全局变量,这是你肯定想要避免的事情.
不使用类语法解决了这个问题
不,通过适当地声明变量来解决问题.
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |