JSfiddle
に次のコードがあります。JSfiddleとChromeのコンソールが同じ機能の異なる値を返すのはなぜですか?
var a = 1;
function five() {
this.a = 5;
console.log(a); //JSfiddle prints the value 1
}
five()
しかし、私はクロームコンソール、機能five()
版画5.なぜ内部まったく同じコードを貼り付け?デフォルトでは
JSfiddle
に次のコードがあります。JSfiddleとChromeのコンソールが同じ機能の異なる値を返すのはなぜですか?
var a = 1;
function five() {
this.a = 5;
console.log(a); //JSfiddle prints the value 1
}
five()
しかし、私はクロームコンソール、機能five()
版画5.なぜ内部まったく同じコードを貼り付け?デフォルトでは
がJSFiddleがwindow.onload
イベントでコードをラップするので、あなたが実際にこれを実行している:this
はまだグローバルオブジェクトを指しながらa
は、その関数に対してローカルであることを意味
window.onload = function() {
var a = 1;
function five() {
this.a = 5;
console.log(a); //JSfiddle prints the value 1
}
five()
}
(window
)。 Chromeのコンソールでは、ラッパー関数がないと、はグローバル変数を作成しています(created and stored as properties on the global object)、window.a
/this.a
と同じです。あなたがJavaScriptのオプションに移動し、「NOWRAP」オプションのいずれかを選択した場合
、それはあまりにもJSFiddleで5
をログに記録します。
が、私はコードを書くでしょう "それを動作させるためにこの方法をどこでも '
var obj = {};
obj.a = 1;
obj.foo = function five() {
this.a = 5;
window.alert(this.a);
}
obj.foo();
これはなぜそれがそれをしているのかに関する質問に本当に答えるものではありません。 – Scimonster
James Thorpeはすでに答えていました。これは、両方の環境で同じ動作をするためにコードを書き換える方法として意図されていました – alessalessio
おそらくホイストのためです。あなたのjsFiddleで、負荷タイプをonDomReadyから
に変更し、入手したものを確認 – j08691jsfiddle https://jsfiddle.net/vasi_32/6sguL84z/2/に5が表示されています。本体にラップされています – brk
@ user2181397 1を返します私のマシンで。 JSfiddle自体で異なるバージョンのGoogle Chromeを使用するのか、ユーザー設定を使用するのかは関係ありません。ユーザーとしてログインせずにコードを貼り付け、1を返します。 – Zip