2011-09-26 29 views
0

的函數。如果我調用一個函數是這樣的:它的論點調用帶有遞增值

var n = 0; f(n, n += 100) 

的值是0和100,而不是100和100,因爲我本來期望。這種行爲做我目前需要在我的程序中,但我不明白爲什麼它這樣工作,它麻煩了我。

有人可以解釋爲什麼會發生這樣的事情嗎?是否可以安全地傳遞這樣的參數?

+0

分配內部函數調用的參數列表?呃,寧可避免... –

回答

2

不像C(和Java一樣),Javascript does實際上有一個定義的參數評估順序:從左到右。所以,有點令人驚訝的是,它安全地編寫代碼,因爲你有。然而,我認爲這樣做風格很差,事實上幾乎是不可讀的,因爲沒有多少人知道評估順序是否事實上已定義(例如:我必須查找它來回答這個問題)。

編輯:見第11.2.4 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

4

第一個參數值在第二個參數值之前進行評估。

1

變量n是JavaScript中的基本類型(原始類型包括數字,字符串和布爾值)。原始類型按值傳遞,解釋您觀察到的行爲。如果n是非原始類型,它將通過引用傳遞,並且對它所做的任何修改都將反映在對n的所有引用中。

有關更多信息,請參閱JavaScript: Passing by Value or by Reference