之前有看到一个问题是说JavaScript中Function.prototype.apply和Function.prototype.call在底层实现上有什么区别。
今天特地去查了一下ECMAScript的文档,发现两者的底层实现都是最终调用了PrepareForTailCall和Call这两个抽象方法,说明它们的底层机制是一样的,只不过call在调用的时候会新创建一个抽象的List来打包参数罢了。
另外值得一提的是,我发现apply在把Array变成List的时候会调用CreateListFromArrayLike这个抽象方法,这意味着在js中调用函数的apply方法传回调参数时,我们也可以传一个类数组对象进去~
展开
PAK向日葵于2020-01-30 17:06发布的图片
PAK向日葵于2020-01-30 17:06发布的图片
PAK向日葵于2020-01-30 17:06发布的图片
评论