gpt4 book ai didi

javascript - javascript : when nested function is defined or executed? 闭包什么时候捕获变量值(在外部函数中定义)

转载 作者:行者123 更新时间:2023-11-29 09:52:12 26 4
gpt4 key购买 nike

我知道范围是在定义函数时创建的。但是我不确定我是否正确理解了变量值(在函数中定义并在内部函数中引用,又名闭包)是否在定义嵌套函数时也被捕获,或者在执行时是否被捕获。

在循环场景中众所周知的闭包中,闭包似乎在循环结束时捕获“i”值。假设循环5次,那么“i”就是4。那么“i”就会被捕获为4。所以看起来“i”只有在执行嵌套函数时才会被捕获?

如果有人能指出捕获发生的位置,我们将不胜感激。

场景一

var fnName = function(x){           
return function(){ return ++x; }; // (is x value captured here?)
};
var fnName1 = fnName(0);
fnName1(); // x=1 (is x value captured here?)
fnName1(); // x=2

场景二

var fnName = function(){    
var x = 0;
return function(){ return ++x; }; // (is x value captured here?)
};
var fnName1 = fnName();
fnName1(); // x=1 (is x value captured here?)
fnName1(); // x=2

场景三

var fnName = function(){            
var x = 0;
function runFn(){ return x++; }; // (is x value captured here?)
runFn();
};
fnName(); // x=0
fnName(); // x=0

最佳答案

变量 在声明时被捕获。该值被捕获(这就是它可以更改的原因)。

var fnName = function(x){ // Here
return function(){ return ++x; };
};


var fnName = function(){
var x = 0; // Here (but remember that hoisting exists)
return function(){ return ++x; };
};

关于javascript - javascript : when nested function is defined or executed? 闭包什么时候捕获变量值(在外部函数中定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com