いいえ、そうではありません - 一度評価されると実行されます - この場合は親関数 ( 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
( IIFEundefined
は何も返さないため)。