Javascript 冒泡作用域-从嵌套函数更新变量
我正在从嵌套函数中的外部作用域更新变量,Javascript 冒泡作用域-从嵌套函数更新变量,javascript,scope,lexical-scope,Javascript,Scope,Lexical Scope,我正在从嵌套函数中的外部作用域更新变量, 由于这是在init函数期间发生的,所以外部作用域不是最外层(窗口)作用域 为了将其保存在init函数范围中,我省略了var关键字,正如预期的那样,变量的新值会弹出并更新 但是console.log('x'在窗口中)的结果为false, 冒泡不是应该到达窗口范围吗?x是在您的init函数中声明的,因此该函数中的x不会解析为全局冒泡 另外,在问题代码中添加注释: console.log(x) // new stuff …这意味着x届时将成为“新东西”。
由于这是在init函数期间发生的,所以外部作用域不是最外层(窗口)作用域 为了将其保存在init函数范围中,我省略了var关键字,正如预期的那样,变量的新值会弹出并更新 但是
console.log('x'在窗口中)
的结果为false,冒泡不是应该到达窗口范围吗?
x
是在您的init
函数中声明的,因此该函数中的x
不会解析为全局冒泡
另外,在问题代码中添加注释:
console.log(x) // new stuff
…这意味着x
届时将成为“新东西”。不会的。您没有调用,但单击任何地方,因此x
将具有其原始的“旧东西”值
如果您确实调用了,但在某个点上单击了,它将更新init
本地的x
。它不会创建或更新全局文件
重新设置更新设置,但作为事件处理程序单击:建议x
应为“新内容”的注释仍然错误。在console.log
行运行时,x
的值为“old stuff”稍后,如果有人单击按钮,x
将由更新,但单击
,但这不会追溯重新运行控制台.log
行
但即使在响应单击而调用时,butClick
仍在更新init
中的x
,而不是全局。变量范围是由词汇决定的,而不是由调用函数的位置决定的。这里没有事件,事件冒泡
标记是不相关的。没错,我更新了代码示例我更新了答案以解决编辑问题。它仍然不会更改记录的内容,也不会创建全局对象。有没有办法让它在第一次单击后变为全局对象?@maioman:在浏览器环境中,您始终可以通过指定全局对象上的属性来创建全局对象,您可以通过其属性窗口
引用全局对象。所以:window.x=“一些值”代码>创建或更新全局x
变量。
console.log(x) // new stuff