gpt4 book ai didi

javascript - 对 Javascript 在特定情况下的这种行为感到困惑

转载 作者:行者123 更新时间:2023-12-03 06:13:08 24 4
gpt4 key购买 nike

我对这个简单代码中的 this 发生的情况感到困惑:

function foo() {
alert(this.a );
}

function doFoo(fn) {
a = "local";
fn();
}

var a = "global";

doFoo( foo );

据我所知,deFoo 是调用 foo 的上下文对象,因此警报的消息应该是“本地”的。这是有效的,除非我在 doFoo 中声明 a:

function doFoo(fn) {
var a = "local";
fn();
}

现在警报消息是“全局”的。谁可以给我解释一下这个?我是 JavaScript 新手。

最佳答案

需要考虑的一些事情:

  1. value这是由 function 决定的被称为!
  2. 如果function被称为 global-context , thiswindow (在浏览器中)
  3. 如果variable未使用关键字 var 定义,是全局变量。

在您的示例中,a内部函数doFoowindow.a这是 local ,调用函数时覆盖。

function foo() {
alert(this.a);
}

function doFoo(fn) {
console.log(window.a);
a = "local"; //window.a is set to "local"
fn();
}
var a = "global"; //window.a is "global"
doFoo(foo);

//Few logs to make it clear

console.log(window.doFoo);
console.log(window.a);

关于javascript - 对 Javascript 在特定情况下的这种行为感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39233536/

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