2015-10-16 50 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