js基础-题目42

整理下之前做的有点疑惑的js基础题目和大家分享以下,如果大家觉得有用,别忘了点一下赞哦

length

function fn(){
    
    
  console.log(this.length)
}
var obj = {
    
    
  length:5,
  methods:function(fn){
    
    
    fn()
    arguments[0]()
  }
}
obj.methods(fn,123) // 0  2

这题的主要问题是
为什么第一个 fn() 打印的是0?
这里扩展下
window.length
function.length
arguments.length

  • window.length
    指的是html文档中 iframe 内敛框架 的个数
<body>
    <iframe src="" frameborder="0">1</iframe>
    <iframe src="" frameborder="0">2</iframe>
    <iframe src="" frameborder="0">3</iframe>
    <script>
      console.log(window.length)//3
    </script>
  </body>
  • function.length
    该函数预期传入的参数个数,我的理解是就是形参个数,但需要满足下面3个条件:
    第一:从第一个开始计算,到已设置默认值的参数截止
    第二:扩展运算符的剩余参数不算
    第三:已设置默认值的参数不算
// 形参个数
console.log(function fn(a) {
    
    }.length);//1
// 已经设了默认值的不算
console.log(function (a = 5) {
    
    }.length);//0
console.log(function (a, b, c = 5) {
    
    }.length);//2
// 属于参数不算
console.log(function (a, b, ...c) {
    
    }.length);//2
// 从第一个计算,到已经设置默认值的参数截止
// 设置默认值的参数是首参数,则不会计算后面参数
console.log(((a = 1, b) => {
    
    }).length);  //0
  • arguments.length
    指的是函数的实参列表,这里没有像形参列表一样多的规则,因为这里没有解构赋值,传的值而不是变量,就是实实在在的实参个数。
let arr = [1,2,3]
function fn(){
    
    
  console.log(arguments.length)
}
fn(a=2,2,...arr)//5

猜你喜欢

转载自blog.csdn.net/hr_beginner/article/details/121231374