我在一个让我困惑的缩小图书馆中遇到了这段JS代码:
...
return e.input || L(), e.addTest = function(a, b) {
...
我在jsFiddle上玩了它,但没有太多运气了解正在发生的事情。
我想知道:
答案 0 :(得分:3)
假设您的代码如下:
return e.input || L(), e.addTest = function(a, b) {
...
}
此代码将:
e.input || L()
L
不是假的e.input
,undefined
,0
,false
,空字符串,null
将会运行e.addTest = function(a, b) { ... }
e.addTest
您可以将其视为:
return ( ( e.input || L() ), e.addTest = function() { ... } )
首先执行||
操作,然后执行赋值操作。
这是因为:
||
运算符是短路的,并将产生其第一个非伪操作数
return a || b
真实或以其他方式返回a
,则a
会返回b
,
运算符向左和向右计算两个操作数,但随后产生右操作数
return a(), b()
同时运行a()
和b()
,但会返回b()
return a = 5
会将5
存储在a
中,然后返回5
在您的情况下,您会看到undefined
,因为alert
的返回值始终为undefined
。
答案 1 :(得分:1)
我认为这意味着如果e未定义或为假,则返回L(),否则返回e.addTest(其中e.addTest定义如下)。
ETA:刚看到你的编辑。 A1rPun解释得很好。