了解缩小的JavaScript代码

时间:2013-12-16 14:51:27

标签: javascript minify

我在一个让我困惑的缩小图书馆中遇到了这段JS代码:

...
return e.input || L(), e.addTest = function(a, b) {
...

我在jsFiddle上玩了它,但没有太多运气了解正在发生的事情。

我想知道:

  1. 什么时候回来?总是很明显。
  2. 它返回了什么?在我的测试中,它返回undefined ......为什么?
  3. 何时执行代码L()?仅当e.input返回false?
  4. 什么时候设置e.addTest?根据我的测试总是......为什么?

2 个答案:

答案 0 :(得分:3)

假设您的代码如下:

return e.input || L(), e.addTest = function(a, b) {
    ...
}

此代码将:

  1. 评估e.input || L()
    • 这意味着如果L不是假的e.inputundefined0false,空字符串,null将会运行
  2. 评估e.addTest = function(a, b) { ... }
    • 这会在e.addTest
    • 中存储新功能
    • 然后,为整个表达式生成函数,以便返回函数
  3. 您可以将其视为:

    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解释得很好。