gpt4 book ai didi

javascript - 冒泡范围 - 从嵌套函数更新 var

转载 作者:行者123 更新时间:2023-12-02 16:31:55 25 4
gpt4 key购买 nike

我正在从嵌套函数的外部作用域更新变量,
由于这是在 init 函数期间发生的,因此外部作用域不是最外层(窗口)作用域;

var init = function() {

var x = 'old stuff' ;

function butClick() {
x = 'new stuff' ;
}
console.log(x); // new stuff

document.querySelector("btn").addEventListener("click", butClick, false);
}
window.addEventListener( 'DOMContentLoaded', init, false);

为了将其保存在 init-function 作用域中,我省略了 var 关键字,并且正如预期的那样,变量的新值会冒泡并更新;

但是 console.log('x' in window ) 的结果是 false,
冒泡不应该到达窗口范围吗?

最佳答案

x 在您的 init 函数中声明,因此该函数(或其中的任何内容)内的 x 不会解析为一个全局性的。

<小时/>

另外,在您的问题代码中添加注释:

console.log(x) //  new stuff

...暗示 x 届时将是“新东西”。不会的。您没有在任何地方调用 butClick,因此 x 将具有其原始的“旧内容”值。

如果您在某个时刻确实调用了butClick,它会更新init本地的x。它不会创建或更新全局。

<小时/>

将更新设置 butClick 作为事件处理程序:建议 x 应该是“新东西”的评论仍然是错误的。截至 console.log 行运行时,x 的值为“old stuff”。 稍后,如果有人点击该按钮,x 将由 butClick 更新,但这不会追溯重新-运行 console.log 行。

但即使在响应点击时调用,butClick 仍在更新 init 中的 x,而不是全局的。变量范围是按词法确定的,而不是由调用函数的位置来自确定。

关于javascript - 冒泡范围 - 从嵌套函数更新 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28213200/

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