为什么普通函数中的 this 关键字值与使用窗口对象调用函数时的值不同

问题描述 投票:0回答:1
"use strict"

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

hello(); // undefined
window.hello(); // window object

我试图创建一个简单的 hello 函数来在严格模式下打印此关键字的值。 我在正常函数调用时未定义。 当我使用 window 对象调用该函数时,this 关键字的值为 window 对象。

想知道幕后发生了什么。

javascript this
1个回答
0
投票

在 JavaScript 中,函数内 this 的值取决于函数的调用方式。您在严格模式下使用 hello 函数观察到的行为说明了 JavaScript 执行上下文和 this 绑定的一些基本概念。

当您直接调用 hello() 时,您将以独立的方式调用该函数,无需显式设置上下文对象(点前没有对象),在这种情况下,“this”默认为全局对象(window in浏览器)。然而,在严格模式下,这并不默认为全局对象。

相反,它仍然是未定义的,以防止与全局范围的意外交互,这是一种更安全、更可预测的行为。这就是为什么您会看到在严格模式下打印 undefined 。

© www.soinside.com 2019 - 2024. All rights reserved.