1 回答

TA貢獻1921條經驗 獲得超9個贊
這里的關鍵角色是運算符優先級,因此,盡管是表達式中的最后一個元素,但首先$a++計算(在 ie 之前)。請注意,其中的意思是對該表達式(變量)的操作后評估,而不是對整個表達式(代碼行)的評估。$apostpost increment
在您的第一種情況下,代碼是這樣的:
$result = 3 * $a++;
所以$a用于乘法的值是3因為它是先讀取然后遞增的。該表達式中不再$a使用,因此新值 of$a并不重要,除非$a再次引用,否則不會影響我們:
$a = 3
$result = 3 * $a++
= 3 * 3
// $a is 4 now
= 9
第二種情況不同:
$result = $a * $a++;
因為我們對$a. 評估將是這樣的:
$a = 3
$result = $a * $a++
= $a * 3 // value of `$a` is 4 after post-increment
// evaluation, and this affects us as we
// evaluate $a again
= 4 * 3
= 12
為了答案的完整性,讓我們再添加一個案例:
$result = $a++ * $a++;
評估將類似地進行,$a最后具有不同的價值:
$a = 3
$result = $a++ * $a++
// $a is 4 now
= 3 * $a++
= 3 * 4
// $a is 5 now
= 12
一旦你理解了這一點,這看起來很清楚,但另一方面很好地展示了你可以通過編寫你認為你知道它是如何工作的代碼而不是它的實際工作原理來輕松地超越自己 :) 所以你要么需要仔細閱讀語言文檔以確保您確定自己編寫的代碼會做什么,或者在未來的調試會話中為了個人理智而避免編寫過于“聰明”的代碼:) KISS原則的存在是有原因的。
- 1 回答
- 0 關注
- 100 瀏覽
添加回答
舉報