JS 中函数的 length 属性

  // 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

 

转载于:https://www.cnblogs.com/go4it/p/9678028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值