2011-10-25 86 views

回答

5

您可以一步步採取這一步驟。

首先,讓我們添加的所有剩餘的括號,使用JavaScript的operator precedence規則:

(o = (((k + 1) < a.length) && (a.charAt(k + 1) == o))) && k++; 

所以說

  1. 計算值(k+1) < a.length。它將是truefalse
  2. 如果這是falsefalse指定爲o,否則將值(a.charAt(k + 1) == o)指定爲o
  3. 如果您已將false指定爲o,則表示已完成。
  4. 否則遞增k
2

此代碼正在改變變量o的內容含義。

在進入該變量包含一個字符,並退出這將是要麼truefalse取決於如果在字符串ak+1位置的字符正是性格。如果k+1碰巧落在字符串外,那麼o將被設置爲false。

作爲一個副作用的情況下,字符匹配這個表達式也增加k

該代碼似乎對我不好的優化的情況下,也...我不uderstand爲什麼需要處理的k+1的特殊情況下,字符串(外面下着雨,除非o變量都不可能包含在輸入空字符串...)

+0

+1我注意到從字符到布爾變化也是如此。我想知道這是否是真正的代碼。 :) –

+0

嚴重隱蔽的代碼。我認爲它的目的是爲了防止逆向工程;) –

+0

可能是故意的...我見過程序員喜歡嘗試「保存」本地變量沒有真正的原因(通常這隻會讓你退回更糟的編譯代碼因爲它使編譯器對生命週期感到困惑)。 – 6502