2017-07-19 54 views
1

當我在示例中嘗試babel Symbol的示例時沒有返回,所以我添加了它,因爲我認爲它應該是(我不確定我是否正確)。當IIFE返回一個值時,該值存在哪裏?

它在我的控制檯登錄MyClass未定義。

如果IIFE返回一個類,爲什麼它說MyClass沒有定義?

(function() { 

    var key = Symbol("key"); 

    function MyClass(privateData) { 
    this[key] = privateData; 
    } 

    MyClass.prototype = { 
    doStuff: function() { 
    } 
    }; 
    return MyClass //this is no return for the original example 
})(); 

var c = new MyClass("hello") 
c["key"] 

回答

2

與其他任何函數調用一樣,該值將進入函數的左側。

var return_value_of_x = x(); 

var return_value_of_iife = (function() { return 1; })(); 

既然你有你的IIFE的LHS什麼,該值將被丟棄。

在你的例子中MyClass是一個在IIFE中聲明的變量。它不在該功能之外。您可以在更廣泛的範圍內創建另一個同名的變量:

var MyClass = (function() { … 
-1

如果您的IIFE正在返回一個值,您可以像這樣存儲該值。

let returnedValue = (function(){console.log('return'); return 2;})(); 
相關問題