[英]How to get a value from anonymous function?
這是代碼和小提琴 :
var test = function(){
return{
value: "hi",
func1: function(){
func2();
}()
};
}();
function func2(){
alert(test.value);
}
誰能告訴我我做錯了什么? 我無法獲得test.value。
從IIFE中為IIFE中的func1
屬性調用func2()
,該屬性構造要分配給test
的對象。 在分配test
之前。 並且它嘗試訪問尚未undefined
的變量的test.value
屬性,並因此引發ReferenceError
。 (另請參見對象文字聲明中的自我引用 )
我想你在找
var test = function(){
return{
value: "hi",
func1: function(){
func2();
} // <-- no invocation here, make `func1` a method not `undefined`
};
}();
function func2(){
alert(test.value);
}
test.func1(); // "hi"
( 更新小提琴 )
如果運行此代碼,將會得到undefined
。 為什么? 好吧,因為您沒有給test
足夠的時間來實際啟動自身 (以及您正在以同步方式進行操作的事實)。
試試這個異步解決方案。
var test = function(){
return{
value: "hi",
func1: function(){
setTimeout(function(){ func2(); }, 50);
//you can also just do
//setTimeout(func2, 50);
}()
};
}();
function func2(){
alert(test.value);
}
還要注意,由於func1本身會自動發出發票,因此您不會將任何內容返回給func1。 稍后,如果您嘗試執行test.func1()
,它將無法正常工作。
問題是您將對象文字分配給test
。 但是,要構建該對象,請調用func2
。 該函數嘗試訪問test
,但是到那時它仍未定義。
因此,在將對象分配給test
之后,應該調用func2
:
var test = function(){
return {
value: "hi",
};
}();
test.func1 = function(){
func2();
}();
function func2(){
alert(test.value);
}
但是,請注意,這有點奇怪,因為匿名函數不會返回任何值。 func2(); test.func1 = undefined
func2(); test.func1 = undefined
會更自然。
如Bergi所述,您想使用Imidiatelly調用函數表達式(IIFE),但是您的語法錯誤。
看到固定的小提琴
var test = (function(){
return{
value: "hi",
func1: function(){
func2();
}
};
})();
function func2(){
alert(test.value);
}
在函數的開頭和結尾處使用(在實際立即調用它之前
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.