冒泡 从嵌套函数更新变量
Bubbling Updating var from nested function
>我正在从嵌套函数中的外部作用域更新变量,
由于这是在 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
,而不是全局。变量作用域由词法确定,而不是由调用函数的位置决定。
相关文章:
- Jquery-每个循环不更新变量
- 函数返回后更新变量
- 我无法通过angularjs中的指令更新变量
- 可以't在quizz页面范围问题上用最终分数更新变量
- 如何在AJAX会话之外更新变量?(Backbone JS/CoffeeScript)
- Javascript 对象方法不更新变量
- 当jquery中的输入发生更改时更新变量
- 无法使用AngularJS更新变量
- 在arr.splice()之后更新变量
- Javascript承诺并更新变量
- jQuery-在输入值更改时更新变量
- 使用数据属性通过 jquery 定位和更新变量
- 从数组中删除不会更新变量内的引用
- 冒泡 从嵌套函数更新变量
- 在 .click 上使用 $.ajax 更新变量
- Javascript - Bootstrap-Slider,如何根据滑块的值更新变量
- JavaScript Ajax 不按时更新变量
- 如何在 JS 中更新变量
- Javascript 没有更新变量
- 在函数中更新变量时,变量不会反映视图中的更新