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

柯林斯
  • 71

第一题

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)
回复
阅读 591
5 个回答
✓ 已被采纳

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

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

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

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

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

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

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

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

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

正义
  • 4
新手上路,请多包涵

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

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

你知道吗?

宣传栏