Javascript ';应用';在引擎盖下执行的方法?

Javascript ';应用';在引擎盖下执行的方法?,javascript,methods,apply,Javascript,Methods,Apply,我还不了解Javascript中的apply方法。据我所知,apply中的第一个参数将是关键字this的期望值,额外的参数将应用于apply借用的函数。我仍然不知道这种方法是如何在幕后应用的。结果怎么可能是[1,2,3,4,5,6,7,8] var flattenedArray = [[1,2],[3,4,5,6], 7, 8] [].concat.apply([],flattenedArray) 谁能帮我看看它在这个场景下是怎么工作的。谢谢结果[1,2,3,4,5,6,7,8]不是的值,而

我还不了解Javascript中的apply方法。据我所知,apply中的第一个参数将是关键字this的期望值,额外的参数将应用于apply借用的函数。我仍然不知道这种方法是如何在幕后应用的。结果怎么可能是[1,2,3,4,5,6,7,8]

var flattenedArray = [[1,2],[3,4,5,6], 7, 8]
[].concat.apply([],flattenedArray) 

谁能帮我看看它在这个场景下是怎么工作的。谢谢

结果
[1,2,3,4,5,6,7,8]
不是的值,而是函数

apply
仅在显式绑定的上下文上调用函数,并可选地将参数作为数组,数组将被传递给函数

当您将
[[1,2]、[3,4,5,6]、[7,8]
传递给函数
apply
时,它会获取内部项(保存内部项的外部项被认为是
apply
的第二个参数的类型,它是一个数组,所以为什么它会一个接一个地获取内部项而忽略外部数组),这些内部项是
[1,2]
[3,4,5,6]
7
8
到函数concat

参见示例。下面两个concat调用是相同的

const flattedArray=[[1,2]、[3,4,5,6]、7,8];
const first=[].concat.apply([],扁平阵列);
console.log(第一);
常数秒=[].concat([1,2],[3,4,5,6],7,8);
console.log(秒);
/[].concat.apply([],扁平阵列)
var concat=[].concat//^^^^^^^^^
var me=[]//^^
// [[1,2],[3,4,5,6], 7, 8]
变量arg0=[1,2]//^^^^^
变量arg1=[3,4,5,6]//^^^^^^^^^
变量arg2=7//^
变量arg3=8//^
me.concat=concat
var res=me.concat(arg0、arg1、arg2、arg3)
删除me.concat

console.log(res)
每个函数都附加了一个上下文。它表示为
[[methodName,context,args]]
。您正在替换这个
上下文
应用
将参数作为数组,而
扁平数组正好是一个完美的匹配。因此,从您的帖子以及我对“应用”的理解来看方法是,它借用了内置方法[].concat来连接外部数组的元素。(在本例中,外部数组保留内部元素([1,2],[3,4,5,6],[7,8])。谢谢
var flattenedArray = [[1,2],[3,4,5,6], 7, 8]
[].concat.apply([],flattenedArray)