自执行匿名函数返回

时间:2014-09-14 13:32:51

标签: javascript function self anonymous

得到了这个功能:

function Something(name){
   this.name = name;
}

var createSomething = (function() {
  function F(args) {
    return Something.apply(this, args);
  }
  F.prototype = Something.prototype;

  return function() {
    return new F(arguments);
  }
})();

var x = createSomething('abc');

为什么createSomething必须是一个自我调用函数?

我注意到在离开调用括号()时,x将为空。但为什么呢?

它在javascript的初始化时调用“unasked”,然后在“ask”中再次运行。 但是第一次运行的重点是什么?它是否正确分配了“this”,或者使用的是什么?

1 个答案:

答案 0 :(得分:4)

  

为什么createSomething必须是一个自我调用函数?

createSomething不是自调用函数,但它存储自调用函数的结果。自我调用函数在javascript世界中也被称为IIFE。我建议你阅读this以便更好地理解。

  

我注意到在离开调用方括号()时,x将为空。   但为什么呢?

它不会是空的,而是指向一个未命名的函数对象。可能你的意思是它不会给出预期的结果。

  

它在javascript的初始化时调用“unasked”然后   一旦“问”,再次运行。但是第一次运行的重点是什么?   它是否正确地指定了“this”,或者是什么意思   使用?

在第一次运行时,未命名的函数会创建一个新函数(然后将其分配给createSomething)。然后使用'abc'调用这个新创建的函数(由createSomething引用),IIFE没有第二次运行。

要注意的另一件事是function F只能由新创建的函数访问。其基本机制称为closures。我建议你理解这些基本概念(在这个答案中链接)以获得更好的图片。