当IIFE返回一个值时,该值存在于何处?

时间:2017-07-19 08:46:37

标签: javascript iife

当我在示例中尝试babel Symbol上的示例时没有返回,所以我添加了它,因为我认为它应该是(我不确定我是否正确)。

登录我的控制台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 个答案:

答案 0 :(得分:2)

与任何其他函数调用一样,该值将转到函数的左侧。

var return_value_of_x = x();

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

由于您的IIFE的LHS上没有任何内容,因此该值将被丢弃。

在您的示例中,MyClass是在IIFE中声明的变量。它不存在于该函数之外。您可以在更广泛的范围内创建另一个具有相同名称的变量:

var MyClass = (function () { …

答案 1 :(得分:-1)

如果你的IIFE返回一个值,你可以像这样存储值。

let returnedValue = (function(){console.log('return'); return 2;})();