2017-07-08 3 views
0

与えられたコードの出力を説明してください"" John "の代わりに印刷しますか?プログラムは厳密ではないモードで実行されています。は、コードが以下の通りである

+0

@MiHawk:ここで吊り上げが行われていますか? – Ryan

答えて

-2

JavaScriptにはいくつかの異なるスコープがあります。変数enameは、関数のスコープ内で作成されます。グローバルスコープ変数にアクセスするには、別の方法で呼び出す必要があります。

https://www.w3schools.com/js/js_scope.asp

+0

ローカルスコープで変数を作成したときにグローバルスコープで変数にアクセスするには、ウィンドウ{variableName}を使用して変数を呼び出す必要があります。ケースの名前は –

+0

です。詳細を追加するための答え。あなたは常に(評判に関係なく)自分の質問や回答を編集する能力を持っています。そうしてください。 –

+0

この回答は間違っています。関数スコープには 'ename'変数はありません。 – melpomene

2

makeWorkera()がとにかくthisなしで呼び出された場合それでは、それが何をするかとmakeWorkerに電話を代わっ、ここでは一種の冗長です:

function a() { 
    this.ename = "Pete"; 
    var work = function() { 
     console.log(this); 
     console.log(this.ename); 
    }; 
    work(); 
} 

var ename = "John"; 
a(); 

としてworkへの呼び出しを置き換えますそれは何ですか:

function a() { 
    this.ename = "Pete"; 
    console.log(this); 
    console.log(this.ename); 
} 

var ename = "John"; 
a(); 

とreplac Eそれは、thisがグローバルオブジェクトであることを再度想定しないものとのaへの呼び出し:

var ename = "John"; 
this.ename = "Pete"; 
console.log(this); 
console.log(this.ename); 

ですから、それを印刷し、その後、"Pete"に設定し、結果は"Pete"で、"John"にグローバルenameを設定します。奇妙なことはありません。これは、各割り当ては、元のコードで発生したとき、あなたが何かをログに記録するのに役立つかもしれない:

function a() { 
 
    function makeWorker() { 
 
     console.log("Setting ename to Pete"); 
 
     this.ename = "Pete"; 
 
     return function() { 
 
      console.log(this.ename); 
 
     }; 
 
    } 
 

 
    var work = makeWorker(); 
 
    work(); 
 
} 
 

 
console.log("Setting ename to John"); 
 
var ename = "John"; 
 
a();

+0

偉大な説明 –

-1

あなたがmakeWorkerを実行しているように見えますし、それが変数ENAMEをオーバーライド簡単です、あなたが欠けていますグローバル変数にアクセスします。

この記事をチェックしてください。 How to access global variable in function hook in javascript?

+0

答えの関連するすべての詳細が別のSO投稿へのリンクで提供されている場合、この質問はその投稿の複製として閉じられるべきです。あなたはそのようにフラグを立てるべきです。 –

+0

こんにちはケン、頭のおかげでありがとう! – TheRock

関連する問題