函数作用域variables不可写

function add() { var counter = 0; counter += 1; return counter } 

为什么计数器variables在第一次迭代之后不会增加? 输出总是1

add函数返回在函数add定义的variablescounter 。 variablescounter的范围是局部函数,这意味着每次调用函数时,都会创build一个新的variablescounter ,然后初始化为零,然后递增计数器。

如果你正在寻找一个计数器实现,那么你需要每次引用相同的countervariables,并增加该variables。 这可以通过使用闭包来实现。

例子:在下面的例子中,有2个函数,1个嵌套在另一个函数内。 内部函数保持对外部函数Environment的引用,在这种情况下包含countervariables。 因此,即使在控件移出函数add之后,内部函数也会保持对countervariables的引用。

 var add = (function(){ var counter = 0; return function(){ return ++counter; } })(); document .querySelector('#btn') .addEventListener('click', function(){ document.querySelector('#output').textContent = add(); }); 
 <div id="output">0</div> <button id="btn">Increment</button> 

这是一个范围问题。 将其更改为

 let counter = 0; function add() { counter += 1; return counter } 

或者如果你想能够做add(),使用嵌套函数

 function adder() { let counter = 0; return function plus() { return counter += 1; }; } let add = adder(); console.log(add()); console.log(add()); console.log(add()); 

您可以使计数器成为全局variables,然后调用add函数:

 function add(){ counter = counter + 1; }