2015-10-16 43 views
0

如果不在更多全局空间中创建变量(或使用.data()),是否可以访问在另一个回调中定义的变量(即open)(即create)?我知道以下内容不起作用,但不知道我的变量是否可以通过eventui对象访问。从另一个回调中定义的访问变量

//var myVariable; //Without defining myVariable here or using data() 
var dialog=$('#dialog').dialog({ 
    create: function(event, ui) { 
     var myVariable=123; 
    }, 
    open: function(event, ui) { 
     console.log(event, ui); 
     console.log(myVariable); //undefined 
    } 
}); 
+1

不,这是不可能的。正如你所怀疑的,你需要在两个函数都可以访问的范围中定义变量,或者使用其他一些存储机制,例如像你所建议的'data'。 –

+0

谢谢先生们。我是这么认为的,但并不是100%肯定的。 – user1032531

+0

实际上,**可能是**(hacky?)的方式 - 但这取决于事情的调用方式! –

回答

1

的缺点是,this不会是什么,通常会在创建和打开

var dialog=$('#dialog').dialog({ 
    myVariable: 0, 
    create: function(event, ui) { 
     this.myVariable=123; 
    }.bind(this), 
    open: function(event, ui) { 
     console.log(event, ui); 
     console.log(this.myVariable); //undefined 
    }.bind(this) 
}); 

//不知道下面是做封闭的最好办法是在建议评论

var dialog=$('#dialog').dialog(
    (function() { 
     var myVariable; 
     return { 
      create: function(event, ui) { 
       myVariable=123; 
      }, 
      open: function(event, ui) { 
       console.log(event, ui); 
       console.log(this.myVariable); //undefined 
      } 
     }; 
    }()) 
); 
+0

ew,但是+1 :)虽然认真@ user1032531 - 在整个地段使用闭包! –

+0

是的,关闭是肯定的方式 –

+0

是的,我想这回答了这个问题。不,我会这样做,但是:) – user1032531