gpt4 book ai didi

javascript - 直接函数调用和闭包中的 call() apply() 有什么区别

转载 作者:行者123 更新时间:2023-11-29 10:20:30 25 4
gpt4 key购买 nike

我在权威指南中读到了这个片段:

function not(f)
{
return function()
{
var result=f.apply(this,arguments);
return !result;
}
}

我无法理解的是,既然这个函数f在闭包中,它的this已经是this,为什么不呢?这段代码不是直接使用 var result=f(arguments); 吗?

我什至读过一些以 undefined/null 作为第一个参数的 call,我认为这完全可以用直接调用代替:

...
while(i>len)
{
if(i in a)
accumulator=f.call(undefined,accumulator,a[i],i,a);
i++;
}
...

为什么作者使用call()而不是直接调用呢?直接函数调用和第一个参数为 undefined 的 call() 之间有什么区别吗?

最佳答案

var result=f(arguments);

...将调用 f() 并传递一个参数,arguments 对象。

var result=f.apply(this,arguments);

...将调用 f() 单独传递 arguments 对象中的参数(可以这么说)。

假设 f() 定义为:

function f(a,b,c) {
// do something with a, b, c
return c;
}

然后给定三个参数 1,2,3 使用 arguments 的直接调用是这样的:

f([1,2,3]);

(请注意,arguments类数组;它不是实际的数组。)

.apply() 版本是这样的:

f(1,2,3);

关于javascript - 直接函数调用和闭包中的 call() apply() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13171139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com