闭包中的javascript变量未显示由$(document).ready初始化时分配的值

时间:2015-11-04 21:27:50

标签: javascript jquery closures

在我的应用中,我有以下关闭。它包含var,在$(document).ready

中初始化
var myClosure = (function() {
  var thing;

  $(document).ready(
    function() {
      thing = new ClassDefinedInSomeOtherFile();
    }
  )

  return {
    thing: thing
  };
})();

当页面加载时(我在chrome中调试),到达了$(document).ready()中的断点,我可以看到thing被分配给 ClassDefinedInSomeOtherFile的对象。 < / p>

但是,尝试随后访问myClosure.thing的元素会遇到错误,指出myClosure.thing未定义(从控制台到myClosure.thing的调用也是如此)。如果thing中的return阻止了myClosure,{为什么它会在$(document).ready()运行时不反映分配给它的新值?

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使用IIFE因此立即执行并返回{ thing: undefined},之后当.ready事件触发时,它会运行并更改thing,但不会更改返回对象,因此myClosure.thingundefined

解决方案:

$(document).ready(function() {
 var myClosure = (function() {
  var thing;
  thing = new ClassDefinedInSomeOtherFile();
  return {
    thing: thing
  };
 })()
});