2016-04-13 10 views
8

JSfiddleに次のコードがあります。JSfiddleとChromeのコンソールが同じ機能の異なる値を返すのはなぜですか?

var a = 1; 

function five() { 
    this.a = 5; 
    console.log(a); //JSfiddle prints the value 1 
} 

five() 

しかし、私はクロームコンソール、機能five()版画5.なぜ内部まったく同じコードを貼り付け?デフォルトでは

+1

おそらくホイストのためです。あなたのjsFiddleで、負荷タイプをonDomReadyからに変更し、入手したものを確認 – j08691

+1

jsfiddle https://jsfiddle.net/vasi_32/6sguL84z/2/に5が表示されています。本体にラップされています – brk

+0

@ user2181397 1を返します私のマシンで。 JSfiddle自体で異なるバージョンのGoogle Chromeを使用するのか、ユーザー設定を使用するのかは関係ありません。ユーザーとしてログインせずにコードを貼り付け、1を返します。 – Zip

答えて

13

が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をログに記録します。

enter image description here

-2

が、私はコードを書くでしょう "それを動作させるためにこの方法をどこでも '

var obj = {}; 
obj.a = 1; 
obj.foo = function five() { 
    this.a = 5; 
    window.alert(this.a); 
} 

obj.foo(); 
+1

これはなぜそれがそれをしているのかに関する質問に本当に答えるものではありません。 – Scimonster

+0

James Thorpeはすでに答えていました。これは、両方の環境で同じ動作をするためにコードを書き換える方法として意図されていました – alessalessio

関連する問題