x = 1;
var add = function (x) {
x++;
return x;
};
setTimeout(add, 1000);
console.log(x);
为什么这不能正常工作?控制台只说1并停止,但我希望每次使用超时属性(1 2 3 4和soforth)调用添加处理程序时添加x。我知道我可以为此使用for循环。但我想知道是否也可以这样做。
答案 0 :(得分:4)
setTimeout
是异步的。你告诉它稍后执行add
1秒(1000毫秒),确实如此。在此期间,执行console.log(x)
,并记录当前值x
,1。
在你提出的问题中,你想要看到价值不断增加。为此,您需要使用更像这样的代码:
var x = 1;
function add() {
x++;
console.log(x);
};
setInterval(add, 1000);
编辑:另外,看看Quentin关于屏蔽全局变量的第2点。
答案 1 :(得分:2)
console.log
。将其移动到函数内部,以便每次函数运行时都会运行。x
的函数(从未填充过)参数,这掩盖了全局参数。删除它。这样:
var x = 1;
function add() {
x++;
console.log(x);
};
setTimeout(add, 1000);