繁体   English   中英

为什么这个自调用函数中的console.log没有被执行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM