2017-11-27 5 views
1

Mozilla開発者のJavascriptチュートリアルに従っており、変数ホスティングのセグメントがあります。このチュートリアルでは、FirefoxのScratchpadを使用してJavaScriptを編集し、コードを素早く保存して表示する方法について説明します。Javascript変数がスクラッチパッドで期待通りに動作しない

iは(チュートリアルからコピーペースト)を使用したコードは次のとおり

/** 
* Example 1 
*/ 
console.log(x === undefined); // true 
var x = 3; 

/** 
* Example 2 
*/ 
// will return a value of undefined 
var myvar = 'my value'; 

(function() { 
    console.log(myvar); // undefined 
    var myvar = 'local value'; 
})(); 

しかしconsole.log(x === undefined)戻るfalse。代わりにconsole.log(x);を実行すると、実際には3が返されます。 console.log(myvar);は、期待どおりに未定義を返します。

ここで起きているはずのものが混乱している、ドキュメントが間違っている/古くなっている、あるいはScratchpadがこのコードを標準のJavaScriptと違って解釈していますか? .jsファイルで実行しようとしましたが、期待どおりの結果が得られました。即時機能で

+1

コンソールは現在のページのグローバルスコープ( 'window')を暗黙的に使用するので、' x'を定義すると、定義されたままになります。すぐに実行される大きな関数にすべてのコードをラップして、きれいなコンテキストで始めることができます。 – Pointy

+0

サンプルコードを2回実行しましたか?そして、 'x'は2回目以降の実行で既に' 3'で初期化されています。 – Bergi

+0

しかし、なぜコードを再実行すると前の変数が保存されるのでしょうか? .jsスクリプトが再び実行されているときに 'メモリ'が消去されないのでしょうか?または、これはページの完全な更新中にのみ発生しますか? – Beep

答えて

0

、あなた再でmyvar変数を宣言:だからwindow範囲からグローバルmyvar変数は、それがconsole.log(myvar);undefinedを返す理由です掲揚されます

(function() { 
    console.log(myvar); // undefined 
    var myvar = 'local value'; 
})(); 

console.log(x);に置き換えると、変数を再宣言していないため、3が表示されます。

あなたの問題:

そして、最初のconsole.log(x === undefined);文の、それだけであなたの場合falseを返します再それを実行し、ので、多分あなたのケースでそれが2回実行されました。

関連する問題