ES6クラス構文を使用すると、 'let'または 'var'なしで宣言されたメソッド内の変数は未定義です。ただし、通常のオブジェクト構文を使用する場合は、それが定義されます。'let'または 'var'のないES6クラス内で変数が定義されていません
問題を説明するために、私はノードの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'のコードはstrictモードを使って実行されます。これにより暗黙のグローバルが禁止されます。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Strict_mode –
私は、2番目のコード例では問題は解決しないが、むしろ問題があると主張します。 –