簡體   English   中英

如何從匿名函數獲取值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM