javascript - js中apply和call的疑问
迷茫
迷茫 2017-04-11 11:31:29
0
3
521

看了很多篇讲解call和apply的文章,感觉理解上越来越混乱T.T
一篇文章里有这样一个例子:

// 获得数组中最大的元素 var arr = [1, 8, 10, 3, 24, 89, 26]; var m = Math.max.apply(Math, arr); // m => 89

我想问的是,为什么这里可以实现获取最大数值的元素呢?为什么要在apply的第一个参数那里把Math自己给传进去呢?apply的第一个参数不是指定函数运行时的作用域吗?理解不了...

下面这个例子我能看懂,但是上面那个例子怎么也理解不了

var name = 'out'; var o1 = { name: 'hello' }; var o2 = { name: 'world' }; function sayName() { alert(this.name); } sayName.call(this); // out sayName.call(window); // out sayName.call(o1); // hello sayName.call(o2); // world

有哪位可以回答一下我的疑问吗,谢谢啦≡ω≡

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua (3)
左手右手慢动作

其实这里不一定非要传Math啊,因为Math.max这个方法内部并不会有操作到this,
所以Math.max.apply的第一个参数随便你传什么,null,undefined都行的。
这里应该只是顺手写了Math而已吧。

    大家讲道理

    很简单的,打比方a有一个plus方法,而b没有

    a = { plus:function(a,b){return a+b;} } b = {};

    b想用a的方法怎么办?就用apply和call嘛,他们不是改变作用域,而是改变this的指向而已?

    a.plus.call(b,1,2); a.plus.apply(b,[1,2]);

    至于你说的第一个为什么要那么写,其实就是为了简单一点,因为已经定义好数组了,不然就要写成这样了

    var m = Math.max(1, 8, 10, 3, 24, 89, 26); var m = Math.max.apply(Math,arr) //简单一点啊
      Ty80

      我觉得你不是已经知道第一个参数是this指向的意思了。

      Math.max(1,2,3)

      的调用环境的this就是Math
      所以

      Math.max.apply(Math,[1,2,3])

      中apply的第一个参数要传Math是为了完全等价于

      Math.max(1,2,3)

      的。

      我没研究Math.max怎么实现的, 应该返回值与this是无关的, 也就是apply的第一个参数无论传什么都不影响返回值。

        Muat turun terkini
        Lagi>
        kesan web
        Kod sumber laman web
        Bahan laman web
        Templat hujung hadapan
        Tentang kita Penafian Sitemap
        Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!