2017-01-19 52 views
2

如何檢查JavaScript中的函數是否需要執行參數?如何檢查函數是否需要參數?

function functionWithArgs(arg1, arg2) {...} 

function functionWithoutArgs() { /* I will return a function here */ } 

我在checkin函數是否有通過ES7裝飾器的任何參數,所以我不知道檢查它們時的函數名稱。

內一個裝飾

// If the function has arguments, use descriptor.value without invoking it 
if (descriptor.value.HAS_ARGUMENTS) descriptor.value; 

// If the function has no arguments, invoke it as it will return a function with arguments 
else descriptor.value(); 

雖然我使用ES7裝飾,這個問題應該能夠在不ES7的任何知識來回答。

更新:我知道,我可以這樣做if (descriptor.value() === 'undefined'),以確定該函數是否返回任何值,但可能並不總是返回函數內的情況。

+0

僅供參考有沒有這樣的東西作爲ES7裝飾。 ES2016(ES7)規格已經完成,裝飾器仍然只是[第二階段提案](https://github.com/tc39/proposal-decorators)。 –

+0

你不知道一個函數*是否需要*參數來運行;只是它是否可以接受它們。 – Utkanos

+0

@DanPrince我沒有提到我實際上使用的是TypeScript,但我不想將它歸類爲TypeScript問題以覆蓋更廣泛的受衆。而尼娜的回答對我來說足夠好用了。 – borislemke

回答

3

您可以檢查功能的length屬性。

length是函數對象的一個​​屬性,它指出函數需要多少個參數,即形式參數的個數。該數字不包括rest parameter,並且只包含第一個參數之前的參數並使用默認值。相比之下,arguments.length是函數的局部,並提供實際傳遞給函數的參數的數量。

function functionWithArgs(arg1, arg2) {} 
 
function functionWithoutArgs() {} 
 

 
console.log(functionWithArgs.length); // 2 
 
console.log(functionWithoutArgs.length); // 0

+0

謝謝!這爲我做了:)在8分鐘內接受這個。這是一個寫過JavaScript三年的程序員應該知道的基本東西嗎? D: – borislemke

+0

@TânNguyễn我用剩下的參數檢查了它,並且它的indees顯示爲0的長度。雖然在使用裝飾器時永遠不會使用其餘參數,但這可能對其他人有所幫助。如果其他人有更好的答案,我會在接受這個之前等待。索茲 – borislemke

相關問題