[英]Why does console.log inside this self invoking function not get executed?
以下代码打印“true”。 我可以理解为什么ff.f等于undefined,但是我不明白为什么在检查这个值时为什么在ff.f里面没有执行console.log(“Hi”)。 定义后不立即执行f吗?
var ff = function(){
var f = function(){
console.log("Hi");
}();
};
console.log(ff.f === undefined);
[编辑]我想问一个更好的方法就是“ff里面的f函数什么时候执行?”。 我认为ff.f的值是“未定义的”,如果在ff执行之前没有执行它,这很奇怪。 不应该是功能吗?
不,它不是 - 它在被评估后执行 - 在这种情况下是执行父函数( 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
您正在函数ff
上查找名为f
的属性 - 并且默认情况下没有这样的属性。 即使你这样做了:
var ff = function () {
ff.f = function() {
console.log("Hello from f");
}();
};
ff.f
仍然是undefined
(因为IIFE不会返回任何内容)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.