// length 是js函數對象的一個屬性值,該值是指 “該函數有多少個必須要傳入的參數”,即形參的個數 // 形參的數量不包括剩余參數個數,僅包括 “第一個具有默認值之前的參數個數” // rest parameter is not counted 即:不包括剩余參數個數 // 例子如下: console.log("function(...args)",(function(...args) {}).length); // function(...args) 0 //解析:函數參數 ...args,無默認值,所以 “第一個具有默認值之前的參數個數” 個數為 0 //有默認值時,length 的值為:包括第一個具有默認值之前的參數個數 console.log("function()",function(){}.length); // function() 0 //解析:函數參數 無參數,無默認值,所以 “第一個具有默認值之前的參數個數” 個數為 0 console.log("function(a = 1, b, c)",(function(a = 1, b, c) {}).length); // function(a = 1, b, c) 0 //解析:函數參數 (a,b,c),其中 a=1 有默認值,a 為“第一個具有默認值的參數”, //a 之前沒有其他參數,所以 “第一個具有默認值之前的參數個數” 個數為 0 console.log("function(b, a = 1, c)",(function(b, a = 1, c) {}).length); // function(b, a = 1, c) 1 //解析:函數參數 (a,b,c),其中 a=1 有默認值,a 為“第一個具有默認值的參數”, //a 之前有一個參數 b,所以 “第一個具有默認值之前的參數個數” 個數為 1 console.log("function(b, c, a = 1)",(function(b, c, a = 1) {}).length); // function(b, c, a = 1) 2 //解析:函數參數 (a,b,c),其中 a=1 有默認值,a 為“第一個具有默認值的參數”, //a 之前有兩個參數 b、c,所以 “第一個具有默認值之前的參數個數” 個數為 2 console.log("function(b, c=1, a = 1)",(function(b, c=1, a = 1) {}).length); // function(b, c=1, c = 1) 1 //解析:函數參數 (a,b,c),其中 c=1、a=1 有默認值,c 為“第一個具有默認值的參數”, //c 之前有一個參數 b,所以 “第一個具有默認值之前的參數個數” 個數為 1 console.log("function(b=1, a=1, c = 1)",(function(b=1, c=1, a = 1) {}).length); // function(b=1, a=1, c = 1) 0 //解析:函數參數 (a,b,c),其中 b=1、c=1、a=1 有默認值,b 為“第一個具有默認值的參數”, //b 之前沒有其他參數,所以 “第一個具有默認值之前的參數個數” 個數為 0 //沒有默認值時,length 的值為:參數的個數 console.log("function()",(function(){}).length); /* function() 0 */ console.log("function(a)",(function(a){}).length); /* function(a) 1 */ console.log("function(a, b)",(function(a, b){}).length); /* function(a, b) 2 */ // 與之對比的是,arguments.length 是函數被調用時實際傳參的個數 console.log("fun (1,2,3) :arguments.length",(function(a = 1, b, c) {return arguments.length})(1,2,3)); // fun (1,2,3) :arguments.length 3 //來自MDN官網:Function 構造器本身也是個Function,它的 length 屬性值為 1 console.log("MDN:Function.length",Function.length); /* MDN:Function.length 1 */ var length="outter"; var obj = { length:"inner", exec:function (){ return (function(length){ return function(){ // code } })(this.length); } }; var exec=obj.exec(); console.log(exec.length); // 0 // 解析: 返回的 exec 是一個閉包 function(){...} ,由上面的 function(){}.length 返回 0 ,可知此處也是返回 0