JavaScriptのundefinedとis not definedが異常です.

1063 ワード

説明しないで直接コードを付けます.
console.log(xx);
console.log(window.xx);
(xxは存在しない変数です)
xx変数を直接印刷すると、is not defined異常を直接投げて実行を終了します.
しかし、xx変数をwindow.xxの形式でプリントアウトした場合、undefinedを直接出力しないと異常が発生しません.継続して実行できます.
関連文書を見て初めて、undefinedを印刷して、その変数が宣言されていますが、割り当てられていません.印刷is not defined異常は、この変数は声明もないことを示しています.この結論を通じて、window.xxの形式はwindowオブジェクトの中で暗黙的にこの変数を宣言します.
これはまた、なぜ以下のコードが直接実行されるのかを説明しています.
window.xx = 2;
console.log(window.xx);
もう一つの関連問題があります.コードを参照してください.
function t1() {
	console.log(str2);  //undefined
	var str2 = 'mike';
}
t1();
function t1() {
	console.log(str2);  //is not defined
	str2 = 'mike';
}
t1();
第一の状況はJavaScriptの運行段階に及んでいます.品詞分析段階と運行段階に分けられています.語法分析段階では、先にstr 2変数を宣言しましたが、割り当てがないので、運行段階でundefinedが現れました.
第二の状況は語法分析の段階でもstr 2を声明できません.varキーワード声明がないので、運行段階で直接に異常を投げます.
もう一つの注意が必要なのは、var宣言を使用していない変数は、最終的にはグローバルオブジェクトwindowの属性になります.
function t1() {
	a = 10
	console.log(a);//10
	console.log(window.a);//10
}
t1();