gpt4 book ai didi

javascript - 没有 'let' 或 'var' 的 ES6 类中 undefined variable

转载 作者:行者123 更新时间:2023-11-30 08:28:02 27 4
gpt4 key购买 nike

当我使用 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

谁能解释这种行为?

最佳答案

When I use the ES6 class syntax, a variable inside a method declared without 'let' or 'var' is undefined.

实际上,它未声明。这就是您得到异常的原因。

However, when using the regular object syntax, it is defined.

那是因为ES6 class methods automatically运行 strict mode ,您的常规对象语法仅在草率模式下运行。 (不应该!“使用严格” 模式无处不在!)
分配给未声明的标识符 will implicitly create a global variable ,这是您绝对想避免的事情。

Not using the class syntax solves this problem

不,通过正确声明变量,问题已解决

关于javascript - 没有 'let' 或 'var' 的 ES6 类中 undefined variable ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42119788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com