gpt4 book ai didi

javascript - 为什么 this 根据放置括号的位置来引用窗口或对象?并返回未定义

转载 作者:行者123 更新时间:2023-11-30 08:48:02 24 4
gpt4 key购买 nike

我正在研究灵活的 javascript 小部件。在一些测试过程中,我注意到 this 的上下文根据用于调用函数的括号是放在对象内部还是放在其调用的全局上下文中而改变。为什么括号很重要?为什么对象内的括号会引用窗口,而当放置在全局上下文中时引用对象。看起来情况正好相反。

同时 undefined 在两个实例中都被返回。有没有办法在不返回任何东西的情况下执行函数?

我觉得我错过了关于this 的一些重要内容,我不想错过。

//this refers to window

var dataSource = {
read: read()
};

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

dataSource.read;

//this refers to dataSource object

var dataSource = {
read: read
};

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

dataSource.read();

最佳答案

您的代码正在做两件不同的事情。

第一个示例是在执行对象定义时执行 read()(read() 可用,因为它是一个函数声明并被提升,尽管这不是与您遇到的问题无关)。它在没有任何上下文的情况下被调用,因此它的 thiswindow(根据规范,其中 window 是浏览器的全局对象)。

第二个示例引用了 read(),然后在 block 的末尾执行。因为它是作为 dataSource 的属性执行的,所以它的 this 将变成 that。但是,如果您首先将该引用分配给其他地方,然后通过该引用调用它,您将再次失去 this 上下文。

对于 this 的细粒度控制,请查看 bind()call()apply()

Also undefined is returned in both instances. Is there a way to execute the function without returning anything?

一个函数总是有一个返回值(undefined 如果没有明确设置),但你可以随意忽略它。

关于javascript - 为什么 this 根据放置括号的位置来引用窗口或对象?并返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com