作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么
if (prev = this.Prev()) {
...
}
工作但是
if (var prev = this.Prev()) {
...
}
不是吗? this.Prev() 是 Point 对象的一种方法,如果它存在则返回对前一个 Point 的引用,如果不存在则返回 false。我不想将变量声明为全局变量,也不想像这样冗长:
var prev = this.Prev();
if (prev) {
...
}
编辑:做我正在尝试的事情最优雅的方法是什么?
最佳答案
发生这种情况是因为 if
statement需要一个表达式:
语法:
IfStatement :
if ( Expression ) Statement else Statement
var
是一个声明,这就是为什么您会收到 SyntaxError
的原因。
您的第一个示例有效,因为赋值是一个表达式 ( AssignmentExpression )
编辑:让我引用这部分:
I don't want to declare the variable to be global
我理解您的担忧,对未声明标识符的赋值可能最终会在全局对象上创建一个属性,而且使用 ECMAScript 5th Strict Mode ,未声明的赋值将导致 ReferenceError
,破坏您的代码
JavaScript 中的变量在实际代码执行之前声明,所有出现的var
语句都绑定(bind)到当前变量对象,并且它们是用 undefined
初始化的,你不能真正声明有条件的变量。
关于javascript - 为什么我可以做 'if (a = 7) ...' 而不是 'if (var a = 7) ...' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3486210/
我是一名优秀的程序员,十分优秀!