我正在研究Coffeescript的输出,试图深入了解幕后发生的事情。当我声明一个新类Person时,会创建一个包含IIFE的变量Person。
var Person;
Person = (function() {
function Person() {
this.doThing();
}
Person.prototype.doThing = function() {};
return Person;
})();
我在这里抛出的是,IIFE本身包含一个名为Person的命名函数声明。这会覆盖原始的Person变量,还是Javascript认为这是一个新的范围?当doThing添加到Person的原型时,哪个对象是专门指的是?
也许我的问题背叛了更深层次的困惑:)
答案 0 :(得分:2)
作为一个函数,IIFE创建了一个新的范围,以便所有'class'
逻辑都被很好地隐藏起来。 IIFE中的Person
将被返回并分配给它之外的Person
,但如果IIFE返回了其他内容,那么外部Person
就是这样。
doThing
被分配给原型Person
里面,但是再次返回Person
,它就是IIFE中相同的函数对象引用。