see*_*con 5 javascript scope ecmascript-6 es6-class
您期望的以下内容不起作用:
let User = {
foo() {
User.prop = 1;
}
};
let User2 = User;
User = null;
User2.foo(); // Cannot set property of null
console.log(User2.prop);
Run Code Online (Sandbox Code Playgroud)
但这有效:
class User {
static foo() {
User.prop = 1;
}
}
let User2 = User;
User = null;
User2.foo();
console.log(User2.prop); // 1
Run Code Online (Sandbox Code Playgroud)
由于函数和类是对象,在这两种情况下我都为它设置了一个属性,为什么结果不同?它在哪里获得User参考?
与命名函数表达式类似,classes包含在一个额外的作用域中,该作用域包含带有名称和值的不可变绑定.
如果我们class忠实地将语法贬低到ES5,我们会得到类似的东西
let User = (() => {
const User = function() {};
// ^^^^^^^^^^
User.foo = function() {
User.prop = 1;
};
return User;
})();
let User2 = User;
User = null;
User2.foo();
console.log(User2.prop); // 1
Run Code Online (Sandbox Code Playgroud)
这个内部User声明是该foo方法正在关闭的声明.覆盖外部变量并不重要.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |