冒泡 从嵌套函数更新变量

Bubbling Updating var from nested function

本文关键字:更新 变量 函数 嵌套 冒泡      更新时间:2023-09-26

>我正在从嵌套函数中的外部作用域更新变量,
由于这是在 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);

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

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

x 在您的

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


另外,问题代码中的注释:

console.log(x) //  new stuff

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

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


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

但即使调用以响应单击,butClick 仍然在 init 内更新x,而不是全局。变量作用域由词法确定,而不是由调用函数的位置决定。