javascript作用域问题:函数执行的上下文,有没有同学帮忙解释下下面这道题目

第一题

var length = 10;
function fn(){
    console.log(this.length);
}

var obj = {
    length:5,
    method:function(){
        fn(); //这里为啥返回10???,帮忙解释下这里谢谢
        arguments[0]() // 这里我知道为什么返回2
    }
}

obj.method(fn,1)

第二题

var length = 10;
function fn(){
    console.log(this.length);
}

var obj = {
    length:5,
    method:function(){
        console.log(this.length); //这里明明表示函数的作用域是obj啊,为啥下面的就变了
        
        fn(); // 还是不知道这里为啥是10
    }
}

obj.method(fn,1)
阅读 2.7k
5 个回答

这个问题是作用域 具体可以看看这篇文章

吐槽一下: 其实你不知道为什么 返回2

简单来说 函数执行的时候 是看他自己的作用域,而不是把函数中的代码copy出来 到调用的位置执行.

但是 argument比较特殊,他会改变this的指向(具体自行百度一下).

第一题返回10, 是因为你单独调用的fn(), 而并不是xxx.fn, 所以fn里面的this指向window
第二题一个意思

A.func()A[...]() 调用,函数中 thisA

func() 调用,函数中 thisundefined(严格模式) 或 global (非严格模式)

每一个 函数调用,this 都要重新计算一次。

注:以上不包括箭头函数。不包括 super.func()

新手上路,请多包涵

定义函数的地方才 去看 变量的位置,不管你在哪里调用都一样,定义变量和定义函数在同一作用域中所以可以直接拿到,当然我没有证明过,我一直都是这样写代码的

????蟹蟹蟹蟹蟹蟹,大概开点窍了,谢谢你们,全部采纳啊哈哈哈

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题