Javascript - window.addEventListener

时间:2014-10-24 16:26:52

标签: javascript closures

所以我有这段代码:

window.addEventListener("load", function() {
  var x = 2;
});
console.log(x); // undefined

无论如何都要使这段代码工作而不影响回调中的代码吗?

1 个答案:

答案 0 :(得分:0)

如果我没有记错,你想做这样的事情:



var x;

window.addEventListener("load", function () {
    x = 2;
});

window.addEventListener("load", function () {
    alert(x);
});




您的代码存在一些问题:

  1. 您在回调函数中声明了变量x。因此,您无法从全局范围访问它。
  2. 即使您在全局范围内声明变量x并在回调函数中定义它,console.log仍会打印undefined,因为调用console.log时,由于从未调用过回调函数,因此尚未定义x的值(最好是在事件循环的下一次迭代中调用它)。
  3. 解决方案是在全局范围内声明x,在load事件的第一个回调函数中定义它,并在{{1的第二个回调函数中完成后处理事件。然而,这是一个非常糟糕的解决方案。更好的解决方案是将所有内容移动到load事件的第一个回调函数中,如下所示:

    
    
    load
    
    
    

    希望有所帮助。