javascript - 在没有 var 关键字的情况下创建全局变量时的意外行为

标签 javascript

这里我只是为我的应用程序创建一个全局命名空间,一切都按预期工作

var MYAPP = MYAPP || {} ; 

但如果我省略 var 关键字(我知道这不是正确的方法),javascript 会抛出错误“ReferenceError: MYAPP2 is not defined”。

MYAPP2 = MYAPP2 || {};

出于好奇,有人可以在第二种情况下向我解释为什么 javascript 无法解析引用。

最佳答案

第一个版本不会产生错误,因为 Javascript 的变量提升使其等同于此:

var MYAPP;            // declares, but leaves the value undefined / unchanged
MYAPP = MYAPP || {};  // creates, if the value was previously undefined

重要的是,此声明部分不会覆盖任何现有声明或已经对变量进行的赋值。

这就是允许在单个范围内重复使用此模式的原因。 MYAPP 要么保留它已有的值,要么初始化为一个空对象。

在第二种情况下,实际上省略了声明步骤。如果变量尚未声明(或以其他方式存在于范围内,即作为全局对象的属性),则会生成您看到的错误。

关于javascript - 在没有 var 关键字的情况下创建全局变量时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932497/

相关文章:

javascript - 为什么设置 element.className = null 导致类 ="null"?

javascript - 使用 angularjs 将焦点更改为下一个输入文本

javascript - 预加载器隐藏效果

javascript - 特定 javascript 实例化模式的正确 typescript 定义是什么

javascript - Angularjs 动态指令

javascript - 需要改变元素在 slideToggle 上的位置

javascript - 在创建项目时获取 Ext.Container 的一些静态属性

javascript - 如何在没有毫秒和 Z 的情况下在 ISO 8601 中的 javascript 中输出日期

javascript - 如何通过javascript在随机位置但在特定宽度和高度内附加div来定位一张图像?

javascript - 在 React.js 中调用同一页面中的多个组件