の仕組みnum
変数は、コード内の関数とは独立しています。どちらの関数も同じ変数を参照するため、同じデータを変更して変更を観察します。
したがって、num++
の操作は、proCall
が呼び出される前に、num
をインクリメントします。 proCall
が最後に呼び出されると、すでにインクリメントされているため、インクリメントされた状態はnum
となります。
ここでは、操作の順序について説明します(巻き上げを無視する)。一連の番号に従ってください。
// 1. create the variable
var num = 01;
// 2. create the processAndIncrement function
function processAndIncrement() {
// 4. Assign a function that logs `num` to the `process` variable
var process = function() {
// 8. log the current value of `num` (which was incremented at step 5)
console.log(num);
}
// 5. increment `num`
num++;
// 6. return the `process` function
return process;
}
// 3. Invoke processAndIncrement, and assign its return value to `proCall`
var proCall = processAndIncrement();
// 7. invoke `proCall` (which is the same as the `process` function)
proCall();
あなたはproCall
が呼び出されたときに発生する増分を望んでいた場合は、num++
はprocess
関数内であることを移動する必要があります。
はい、関数ハンドルを返します。これは、呼び出されると、 'num'の現在の値を出力します。特にあなたはそれについて理解していないのですが、どうしてそれが '1 'を記録すると期待していたのですか? – Bergi
'processAndIncrement'の呼び出しは' num'(グローバル変数)をインクリメントし、 'num'(これは' 2'です)を記録する別の関数を返します。 –