JavaScriptでは、関数内で作成される変数はその関数内のスコープのみを持ちます:その場合、次のコードはなぜ出力1を生成しますか?確かにx
はfoo
の外部からアクセスできませんか?Javascript関数スコープ変数はグローバルスコープで利用可能
function foo(){
x = 1;
}
foo()
console.log(x) // '1'
JavaScriptでは、関数内で作成される変数はその関数内のスコープのみを持ちます:その場合、次のコードはなぜ出力1を生成しますか?確かにx
はfoo
の外部からアクセスできませんか?Javascript関数スコープ変数はグローバルスコープで利用可能
function foo(){
x = 1;
}
foo()
console.log(x) // '1'
var, let or const
なしで定義された変数に割り当てられているためです。 のコードがstrictモードでないため、という名前のグローバルオブジェクトの(window
)プロパティには、x
という名前のプロパティが割り当てられています。 use strict
の部分のコメントを解除でき、例外が表示されます。
// 'use strict';
function foo() {
x = 1;
console.log(window.x);
}
foo();
console.log(window.x);
あなたがキーワードで宣言する場合は、関数外にアクセスすることはできませんし、それは、window
対象になりません。
function foo() {
let x = 1;
console.log(x);
}
foo();
console.log(window.x);
恐らく '' use strict ''、' let'/'var'といっしょにいくつかの例を追加するでしょうか? – msanford
またはconstのようにJavaScriptの脅威それグローブ変数
function foo(){
x = 1;
}
foo()
console.log(x) // '1'
var、letまたはconstを使用すると、以下のように動作します。
function foo(){
var x = 1;
let y = 1;
const z = 1;
}
foo()
console.log(x)
//console.log(y)
//console.log(z)
あなたはそれを残すべきでした、JSは 'console.log(x)'で停止するので、他の人は決して呼び出されません。 –
@DarrenSweeneyこれらの行をコメントしてくれたことを忘れてありがとう –
このコードは、[厳密モード(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)に例外をスローします。厳密なモードを常に使用する必要があります。 – Quentin
*関数内で作成された変数は、その関数内でのみスコープを持ちます* *あなたのような暗黙のグローバル*変数の場合は当てはまりません。 – Pointy
宣言されていない変数を使用することは決してありません。 –