我正在努力解决这个问题。通过查看下面的内容,我不明白当我在控制台上输入“counter”等于以下内容时。如何获取这段代码?这是如何工作的?
function(val) {
count += val;
return console.log(count);
};
守则
var incrementer = function(initialValue) {
var count = initialValue;
return function(val) {
count += val;
return console.log(count);
};
};
var counter = incrementer(5);
counter(3);
counter(1);
答案 0 :(得分:1)
由于incrementer
会返回一个函数,这实际上意味着一旦counter
填充incrementer(5)
,它就会成为对incrementer
返回的函数的引用那个计数器变量在那个时候看起来像这样:
counter = function(val) {
count += val;
return console.log(count);
};
验证这一点:
console.log(counter);
因此,对counter
的后续调用将增加count
注意:变量count
存在于incrementer
的范围内,只能因为counter
引用的函数是在该范围内创建而被访问。
答案 1 :(得分:0)
增量器是一个返回函数的函数。计数器等于增量函数的返回值,增量函数是一个函数,它接收一个值并递增最初在增量器(5)中传递的值。
调用incrementmenter(5)本质上设置初始状态,但返回可以使用您创建的计数器指针(变量)调用的函数。
这种解释是否有意义?
var counter = incrementer(5); //initializes the "initial value" and returns a function, thus setting "counter" equal to a function.. aka function pointer
counter(3); //invokes the function that increments the value by 3 - hence 8
答案 2 :(得分:0)
在javascript中,函数会记住声明它的上下文。
解释闭包的最快方法。
因此,如果创建一个返回函数的函数,返回的函数将“关闭”外部函数的变量,因此返回的函数具有状态。
由于count已在返回函数的“parent”范围内声明,因此返回的函数将记住其内部变量count指的是增量器的变量计数。