美文网首页
this作用域

this作用域

作者: 没有昵_称 | 来源:发表于2020-07-17 09:56 被阅读0次

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

    var obj = {
    length: 5,
    method: function(fn) {
    fn();
    arguments0;
    }
    };

    obj.method(fn, 1);

    output:

    10
    2
    在程序执行时,使用了obj.method方法,这时候this指向了obj,但是在真正执行 fn函数体时,也就是fn()执行的时候,this指向了window,所以第一个结果是10

    为什么第二次执行arguments0的结果是2?

    分析下在obj.method(fn, 1)执行时,经历了什么:首先两个参数fn和1会被放入arguments中,在arguments中第一个参数就是我们传入的函数,接下来fn()执行,此时的this没有绑定因此指向window,输出10,到了arguments0这一句,相当于把arguments[0]中的第一个参数拿来执行,效果如下:

    arguments0 //执行,等同于下m面
    arguments.0() //当然这句话是不合法的,但是这样我们可以更清楚知道,this是指向arguments实例本身
    arguments.length就是它本身的长度,因此输出2

    var length = 10;
    function fn() {
    console.log(this.length); //3
    }
    var arr = [fn,12,13]
    arr0

    //同上

    相关文章

      网友评论

          本文标题:this作用域

          本文链接:https://www.haomeiwen.com/subject/egiwhktx.html