冒泡范围 - 从嵌套函数更新 var
Bubbling scope - Updating var from nested function
我正在更新嵌套函数中外部范围的变量,
因为这是在 init 函数期间发生的,所以外部作用域不是最外层 (window) 作用域;
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 )
的结果是假的,
冒泡不是应该到达 window 范围吗?
x
是在您的 init
函数中声明的,所以不,该函数(或其中的任何内容)中的 x
不会解析为全局变量。
另外,在您的问题代码中发表评论:
console.log(x) // new stuff
...暗示 x
届时将是 "new stuff"。它不会。您没有在任何地方 调用 butClick
,因此 x
将具有其原始 "old stuff" 值。
如果您 确实 调用了 butClick
,它会更新 init
本地的 x
。它不会创建或更新全局。
将您的更新设置 butClick
作为事件处理程序:建议 x
应该是 "new stuff" 的评论仍然是错误的。截至 console.log
行 运行 秒,x
的值为 "old stuff"。 以后,如果有人点击按钮,x
会被butClick
更新,但不会追溯-运行 console.log
行。
但即使在响应点击时被调用,butClick
仍在更新 init
内的 x
,而不是全局更新。变量作用域是由词法决定的,而不是由调用函数的位置决定的 from.
我正在更新嵌套函数中外部范围的变量,
因为这是在 init 函数期间发生的,所以外部作用域不是最外层 (window) 作用域;
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 )
的结果是假的,
冒泡不是应该到达 window 范围吗?
x
是在您的 init
函数中声明的,所以不,该函数(或其中的任何内容)中的 x
不会解析为全局变量。
另外,在您的问题代码中发表评论:
console.log(x) // new stuff
...暗示 x
届时将是 "new stuff"。它不会。您没有在任何地方 调用 butClick
,因此 x
将具有其原始 "old stuff" 值。
如果您 确实 调用了 butClick
,它会更新 init
本地的 x
。它不会创建或更新全局。
将您的更新设置 butClick
作为事件处理程序:建议 x
应该是 "new stuff" 的评论仍然是错误的。截至 console.log
行 运行 秒,x
的值为 "old stuff"。 以后,如果有人点击按钮,x
会被butClick
更新,但不会追溯-运行 console.log
行。
但即使在响应点击时被调用,butClick
仍在更新 init
内的 x
,而不是全局更新。变量作用域是由词法决定的,而不是由调用函数的位置决定的 from.