2016-09-19 55 views
0

任何人都可以向我解釋這是如何工作的?我看到一個帶有一個參數的函數,並且每當它具有「小於或等於3」的參數時,它就會拋出一個錯誤,這總是會發生的。Hapijs Glue'撰寫'功能不應該工作,但它確實。怎麼樣?

exports.compose = function (manifest /*, [options], [callback] */) { 

    Hoek.assert(arguments.length <= 3, 'Invalid number of arguments'); 

我看到這裏:

https://github.com/hapijs/glue/blob/67f8331326e11fb91c1ee0c4a99ac6c0ec310f5e/lib/index.js#L38

這是如何工作的?我誤讀了嗎?

+1

它將引發錯誤如果'!(的arguments.length <= 3)'。 – 2016-09-19 14:55:57

回答

0

在JS,宣佈

var f = function (a, b, c) { 
    console.log(a+b+c); 
}; 

相當於

var f = function() { 
    var a = arguments[0]; 
    var b = arguments[1]; 
    var c = arguments[2]; 
    console.log(a+b+c); 
}; 

這意味着你的名字參數只是一個「暱稱」爲arguments[i],並且可以調用一個函數或不帶參數:「預期」(已命名)參數將簡單地爲undefined

相比其它語言,函數的參數不是其簽名的一部分。這使得編碼更不嚴格,因爲您可以進行錯誤的調用,而不會發生解釋器錯誤。然而,這與JS的弱類型本質是一致的:函數也是鬆散類型的,因爲它們的簽名就是他們的名字。

所有的功能是事實上variadic這種方式,它本質上允許的overloading原則,因爲你的函數的行爲可能不同取決於量和參數性質。 (PHP,這是弱類型也有同樣的機制。)

the arguments object definition這將告訴你更多關於這個功能!

相關問題