我正在从stackoverflow Wiki阅读此post。并且我想完全理解以下代码片段。希望有人可以帮助解决以下问题。
var plane = function(defaultAirport) {
var lastAirportLeft = defaultAirport;
var car = {
driver: {
startAccessPlaneInfo: function() {
setInterval(function() {
console.log("Last airport was " + lastAirportLeft);
}, 20000);
}
}
};
car.driver.startAccessPlaneInfo();
return {
leaveTheAirport: function(airPortName) {
lastAirportLeft = airPortName;
}
}
}("Boryspil International Airport");
plane.leaveTheAirport("John F. Kennedy");
当我打开控制台时,我只是检查typeof(plane),它是一个对象。但是,如果我叫飞机(“默认机场”),它将抛出错误。我知道“鲍里斯波尔国际机场”已经进入飞机,但是如何用另一个飞机覆盖现有的价值呢?另外,plane是一个函数对象,为什么不能像plane(“ XXX”)那样调用?
在调用plane.leaveTheAirport(“ John F. Kennedy”)之后,控制台将打印出John F. kennedy而不是鲍里斯波尔国际机场。谁能解释为什么将外部作用域中的旧值替换为旧值?
最佳答案
1.当我打开控制台时,我只是检查typeof(plane),它是一个对象。
好。
typeof是运算符,因此不需要分组运算符,因此:typeof plane
就足够了。
但是,如果我呼叫飞机(“默认机场”),它将引发错误
对象不实现调用,函数不实现,这是可以预期的。
“鲍里斯波尔国际机场”已经投入使用,但是如何用另一个来覆盖现有价值呢?另外,plane是一个函数对象,为什么不能像plane(“ XXX”)那样调用?
我认为您的意思是“为lastAirportLeft赋予新的价值”。分配给plane.leaveTheAirport的函数具有lastAirportLeft变量的闭包,因此它可以设置值(确实如此)。
另外,plane是一个函数对象,为什么不能像plane(“ XXX”)那样调用?
不,不是。如果是,typeof plane
将返回'function'
,请参见上文。
在调用plane.leaveTheAirport(“ John F. Kennedy”)之后,控制台将打印出John F. kennedy而不是鲍里斯波尔国际机场。谁能解释为什么将外部作用域中的旧值替换为旧值?
因为plane.leaveTheAirport对变量具有闭包,所以可以对其进行访问。
请参见MDN: Closures和Private Members in JavaScript。
关于javascript - 这个stackoverflow Wiki答案对此IIFE的解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34301968/