JavaScript スコープ
現時点で知っている最も正確な用語を使用したいと考えていますが、それが完全に正しいわけではないことも承知しています。私はJavaScriptの第一人者ではありませんが、あなたが尋ねているこの問題はJavaScript Scope に関連しています。このトピックに関する多くの記事と、例で見つけたこのようなSO に関する Q&A も見つけることができます
一歩一歩
あなたのスニップネットが何をするかを行ごとに再現しようとします。どこかで間違った用語に気付いた場合はコメントしてください。私はいつでも学ぶのが好きです:D
ライン1
var doB = function() { return a+1};
意味
現在のスコープに「doB」という名前の変数を保存し、その内容を無名関数に割り当てます。
それで...
a今のところ問題ありません。
2行目
var b = a+1;
意味
現在のスコープで指定された変数bを保存し、その内容new Integer(1)を variable に加えてに割り当てますa。
それで...
現時点でaはundefined、現在のスコープで宣言されておらず、このスコープからアクセスできる他のスコープも宣言されていないためです。演算undefined + aは に等しいNaN。a値として割り当てNaNられます。
3行目
var a = 3;
意味
現在のスコープで名前が付けられた変数aを保存し、その内容をnew Integer(3)
それで...
aこれで、整数を格納する変数ができました。
4行目
console.log(b);
実際は でNaNあるため、出力します。bNaN
5行目
console.log( doB() );
意味
引数なしで関数をconsole.log呼び出して返された値をdoB最初の引数として関数を呼び出します。
それで...
doBが呼び出されて返されます: a+1
つまり
new Integer(1)変数に加えてa。a関数のローカル スコープには存在しませんが、関数内でアクセス可能なスコープには存在します。値はそこから取得され、実際には3. コンソール出力4。