這個問題在這里已經有了答案: 函式呼叫和函式參考有什么區別? (6 個答案) 在 JavaScript 中,如果我用括號呼叫函式會有什么不同嗎? (5 個答案) 昨天關門了。
`當函式傳遞一個引數時,回傳一個錯誤,表明 a 不是一個函式,而沒有引數它執行并給出 output=3
function one(d) {
return 1;
}
function two() {
return 2;
}
function invokeAdd(a, b) {
return a() b();
}
console.log(invokeAdd(one(8), two));
uj5u.com熱心網友回復:
正如 Dai 所說,您使用函式的結果作為引數,使引數成為數字而不是函式。要回傳函式本身,請使用箭頭運算子使其呼叫它。
invokeAdd(() => one(8), two))
uj5u.com熱心網友回復:
將函式傳遞給其他函式
讓我們以下面的例子為例:
function invokeAdd(param) {
return param;
}
嘗試注銷這樣的功能。
function invokeAdd(param) {
return param;
}
console.log(invokeAdd)
您會注意到在控制臺中它會向您顯示函式定義,因為這是invokeAdd
變數存盤的內容。
現在讓我們嘗試記錄帶有引數的函式。
function invokeAdd(param) {
return param;
}
console.log(invokeAdd("test"))
您會注意到您將獲得我們傳遞return value
的函式的。argument
因此,當您嘗試時,console.log(invokeAdd(one(8), two));
您的第一個引數實際上是在傳遞one(8)
不是實際函式的結果。
uj5u.com熱心網友回復:
當你運行 one(8) 時,你正在執行一個不傳遞它的函式。所以你傳遞給 invokeAdd 的是 one(8) 的結果。
嘗試這樣做:
function one(d) {
return 1;
}
function two() {
return 2;
}
function invokeAdd(a, b) {
return a() b();
}
console.log(invokeAdd(() => one(8), two));
uj5u.com熱心網友回復:
function invokeAdd(a, b) {
return a() b();
}
這個函式有兩個引數,它們應該是函式,而你正在做的是給出一個值和一個函式而不是兩個函式。為了得到你想要的,這樣做
console.log(invokeAdd(()=>one(8), two));
uj5u.com熱心網友回復:
因為您在傳遞引數本身的同時執行了函式“one”。因此,這就是問題所在。以下是相同的解釋。
您已將 2 個函式 a 和 b 作為引數傳遞給函式“invokeAdd”。
當函式“invokeAdd”執行并在呼叫堆疊上時,它期望“a”成為函式并在我們使用括號(“()”)時執行。
現在因為在呼叫函式“invokeAdd”時我們已經執行了函式并且執行后的回傳值是實際值,在這種特殊情況下為“1”。
而對于“b”,我們已經傳遞了函式參考,它在觸發求和運算子時執行。
希望這可以幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/537589.html
下一篇:TypeError:function()missing1requiredpositionalargument:'y'