【发布时间】:2012-01-30 16:00:56
【问题描述】:
出于求知欲,javascript为什么接受
var z = z || [];
初始化z(如z最初定义的那样)
但没有 var,它会抛出错误(在全局空间中)
z = z || [];
(如果 z 之前未定义)
在全局空间中,您不需要使用 VAR,尽管我知道这可能是不好的做法。
在您说之前,这是重复的问题,例如
What is the purpose of the var keyword and when to use it (or omit it)?
请注意声明“如果您在全局范围内,则没有区别。”
鉴于我的工作示例,这显然不是 100% 正确的。
这是一个怪癖还是有合理的逻辑?
添加我所学的答案摘要:
感谢 Tim(见下文),我误解的关键是没有意识到这一点(javascript 基础)
变量 z;如果 z 已经存在,则什么都不做
如果你错误地假设“var z”总是初始化,这就是这个表达式似乎有两种方式的方式。
从左边开始,“var z”只是确保 z 已定义,但实际上不会影响任何现有值(如果它已经存在)。然后在右边,如果z已经存在,则使用它,如果不存在,则该变量刚刚声明(但为空),因此不会使用但不会抛出错误。
这是一篇关于 Javascript 中这种范围界定和提升问题的优秀文章: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
非常感谢 minitech 和其他所有做出贡献的人!
【问题讨论】:
-
作为一般规则:复制实际的错误消息通常比写“抛出错误”更有帮助。
标签: javascript var scoping operator-precedence hoisting