fn.call(undefined)有什么意义

在zepto.js中看到这样的代码:

 if (Array.prototype.reduce === undefined)
        Array.prototype.reduce = function(fun){
        //...省略好多代码
              accumulator = fun.call(undefined, accumulator, t[k], k, t);
        //...省略好多代码
        }

这里的参数'fun'调用使用了call的形式,有必要吗?有什么意义?
functionA.call(undefined) 和 functionA() 在我看来是没有什么区别的,他们内部的this都是指向windows对象.

补充测试:

    <script>
    var myMethod = {
        reduce1: function(fn) {
            fn.call(undefined);
        },
        reduce2: function(fn) {
            fn();
        }
    }
    var obj = {
        sum: function() {
            console.log('this in obj:', this);
        }
    }

    var sum = function() {
        console.log('this in global function:', this);
    };
    myMethod.reduce1(obj.sum);
    myMethod.reduce2(obj.sum);
    //this in obj: Window {external: Object, chrome: Object, document: document, myMethod: Object, arr: Array[5]…}
    </script>
阅读 3.5k
3 个回答

为了传参数为了传参数

给你传入的fun函数传递参数。

函数的几种调用方法

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