我寫了一個函數:關於JavaScript函數的valueOf 的toString和 '咖喱' 功能在Chrome,Firefox的不同表現和節點環境
function add(){
let arr = [];
arr = arr.concat(Array.prototype.slice.apply(arguments))
let fun = function(){
arr = arr.concat(Array.prototype.slice.apply(arguments))
return fun
}
fun.toString = function(){
console.log(222)
return arr.reduce(function(total, num){
return total+num
}, 0)
}
return fun
}
console.log(add(1,2)(2,3)(3))
這是在Chrome: enter image description here
兩個問題:
在第一行,爲什麼是
'f 11'
而不是'11'
?爲什麼首先輸出
'f 11'
,而不是'222'
,我認爲應該先執行類型轉換,然後在控制檯上輸出計算結果。
另一種奇怪的東西,它是與相同的代碼,結果在Firefox: enter image description here
而導致節點環境: enter image description here
我不明白爲什麼,似乎在FF和節點,還沒有執行計算的操作。
請幫助我...非常感謝!
* f *的意思是*功能*這是正確的 –
這是什麼意思?爲什麼你必須調用'toString'來獲取值?這完全違反直覺。嘗試有一個同時具有可變性和咖喱味的「添加」功能是很奇怪的。 –
@JonasW。正確的功能? – DaXiong1