不,它不是 - 它在评估后执行- 在这种情况下是执行父函数 ( ff
) 时。
什么时候f
执行
任何 IIFE 一旦被评估就会被执行 - 任何包含在其他函数中的此类表达式只会在它的作用域(包装)执行后才被评估:
// Executed when the execution flow reaches this point
// i.e. immediately after the script starts executing
var outer = function() {
console.log("Hello from outer");
}();
var wrapper = function() {
// Executed when the flow reaches this point
// which is only when the function `wrapper`
// is executed - which it isn't, so this never fires.
var inner = function() {
console.log("Hello from inner");
}();
};
为什么ff.f
不是函数
JavaScript 是函数作用域,但 JavaScript 没有提供任何访问函数内部作用域的方法(据我所知,至少没有)。因此,当您尝试访问时,ff.f
您正在寻找函数上命名的属性- 默认情况下没有这样的属性。即使你这样做了:f
ff
var ff = function () {
ff.f = function() {
console.log("Hello from f");
}();
};
ff.f
仍然是undefined
(因为 IIFE 不返回任何东西)。