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