简单的JavaScript,无法理解它

时间:2014-07-01 15:08:59

标签: javascript

x = 1;

var add = function (x) {
  x++;
  return x;
};

setTimeout(add, 1000);

console.log(x);

为什么这不能正常工作?控制台只说1并停止,但我希望每次使用超时属性(1 2 3 4和soforth)调用添加处理程序时添加x。我知道我可以为此使用for循环。但我想知道是否也可以这样做。

2 个答案:

答案 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)

  1. 您只能在开始时致电console.log。将其移动到函数内部,以便每次函数运行时都会运行。
  2. 你有一个名为x的函数(从未填充过)参数,这掩盖了全局参数。删除它。
  3. 这样:

    var x = 1;
    
    function add() {
      x++;
      console.log(x);
    };
    
    setTimeout(add, 1000);