javascript - JavaScript 中的自调用函数中的提升

标签 javascript

我知道提升的一般规则,变量和函数在编译阶段就会被提升。

因此,任何内容都可以写成以下内容

var foo = 'global';

将被编译为,

var foo; // Undefined
foo = 'global'; // Declared

但这是我无法理解的

<小时/>
var foo = 'global';
var myObject = {
    foo: 'local',
    func: function(){
        console.log(this.foo); // Local
        (function(){
            console.log(this.foo); // Global
        })();
    }
}
myObject.func();

为什么 myObject 中的自调用函数打印全局 foo/并获取 window 的上下文?

总的来说,我想了解的是它在哪里被吊起。

最佳答案

在调用 console.log(this.foo) 之前添加 console.log(this);,您将看到 this本质上只是窗口。这就是为什么您会获得全局 foo

函数中this的默认值在直接调用时是“全局对象”;在浏览器中,全局对象是window。在这种情况下,您也会看到窗口:

function foo() {
    console.log(this);
}
foo();

由于您已经定义了一个函数表达式并立即调用了它,因此它本质上是直接调用该函数(类似于直接调用常规函数的方式)。

关于javascript - JavaScript 中的自调用函数中的提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429274/

相关文章:

javascript - 为什么 0 < -0.75 < 1 为真?

javascript - 从视口(viewport)中心展开 div

javascript - 一个盒子的最大体积

javascript - 从 Javascript 文件调用 Rest API : Data Return Issue

javascript - 通过传递参数通过单击按钮来操纵表格列宽

javascript - 使用 jQuery 计算 PRE 元素的行数

javascript - 单击按钮时 HTML 和 Javascript 图片更改

javascript - 有没有一种方法可以检查 javascript 以毫秒为单位执行一个函数需要多长时间?

Javascript 在 HTML5 DOM 上从数组渲染动画。首先慢跑!第二次运行顺利。怎么会?

javascript - 防止表单输入中出现双字节数字