请问各位一道题

将数组 arr 中的元素作为调用函数 fn 的参数
输入例子:
argsAsArray(function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!'])

输出例子:
Hello, Ellie!

function argsAsArray(fn, arr) {
    return fn.apply(this, arr);
}

在这段代码中this是干吗用的?

阅读 3k
7 个回答

请了解apply的用法。

因为Js的this是动态绑定的

这个写法让 this 一定绑定在arr上

粗浅的回答一下this的概念。
比如你列了10个按钮,并用循环把10个按钮都赋予一个onclick事件。那么你点的时候怎么让程序知道你点的是哪个呢?
那就用this,this就是挑选出当前的对象,你点按钮1,那this就是这个按钮1。以此类推…

新手上路,请多包涵

指定,上面是两个参数,下面的this就可以指定是哪个参数

这里涉及到了作用域的问题,this一般指代当前函数下的一个全局对象。当你使用回调的时候,回调函数内部的this就和外部函数的this不是一个,你用到的变量在外部的全局对象上,在回调函数内使用就编程undefined了。所以常看见在外部函数用var self=this;这种语句。这种语句的作用是把外部的作用域带入回调函数内部,在回调函数内部也能使用外部的全局对象。你上边的方法的作用是一样的,只不过写的比较隐蔽,把外部的this作为参数传入回调函数,这样内部回调函数就能使用外部全局对象上绑定的变量和方法等。听起来很绕嘴,多感受几次就好了。

如果你要问 this 在这个函数里有什么用,我会告诉你,并没什么用。
不信你改成:

function argsAsArray(fn, arr) {
    return fn.apply(null, arr);
}

这样照样能得出你要的答案

推荐问题
宣传栏