javascript如何与';作为函数返回';作品
我试图理解javascript函数如何返回函数句柄,以及为什么下面的代码打印“2”而不是“1”javascript如何与';作为函数返回';作品,javascript,function,return-type,Javascript,Function,Return Type,我试图理解javascript函数如何返回函数句柄,以及为什么下面的代码打印“2”而不是“1” var num=01; 函数processAndIncrement(){ var进程=函数(){ console.log(num); } num++; 返回过程; } var proCall=processAndIncrement(); proCall()变量num独立于代码中的函数。这两个函数都引用同一个变量,因此它们都对相同的数据进行变异并观察变化 因此num++操作在调用proCall之前递增
var num=01;
函数processAndIncrement(){
var进程=函数(){
console.log(num);
}
num++;
返回过程;
}
var proCall=processAndIncrement();
proCall()
变量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++
移动到进程
函数中。代码打印2
,因为您增量num
的值已经是1
(01==1) 是的,它返回一个函数句柄。调用时,将输出当前值num
。您特别不了解的是,为什么希望它记录1
(并且从不递增)?对processAndIncrement
的调用递增num
(这是一个全局变量)并返回另一个记录num
(现在是2
)的函数。