得到了这个功能:
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”,或者使用的是什么?
答案 0 :(得分:4)
为什么createSomething必须是一个自我调用函数?
createSomething不是自调用函数,但它存储自调用函数的结果。自我调用函数在javascript世界中也被称为IIFE。我建议你阅读this以便更好地理解。
我注意到在离开调用方括号()时,x将为空。 但为什么呢?
它不会是空的,而是指向一个未命名的函数对象。可能你的意思是它不会给出预期的结果。
它在javascript的初始化时调用“unasked”然后 一旦“问”,再次运行。但是第一次运行的重点是什么? 它是否正确地指定了“this”,或者是什么意思 使用?
在第一次运行时,未命名的函数会创建一个新函数(然后将其分配给createSomething
)。然后使用'abc'调用这个新创建的函数(由createSomething
引用),IIFE没有第二次运行。
要注意的另一件事是function F
只能由新创建的函数访问。其基本机制称为closures。我建议你理解这些基本概念(在这个答案中链接)以获得更好的图片。