Javascript 与apply调用相关的问题
我有一个函数,只调用了一次,但当我在浏览器中运行它时,它似乎运行了两次Javascript 与apply调用相关的问题,javascript,arrays,Javascript,Arrays,我有一个函数,只调用了一次,但当我在浏览器中运行它时,它似乎运行了两次 function max(){ log(参数[0]); 返回此.max.apply(数学,数组.from(参数[0]); } log(最大值([1,32,42,1]); /* 这是控制台的输出: ------------------------ [1, 32, 42, 1] 1. -无穷大 */其中此指的是窗口对象,因此int只是递归调用相同的函数,因为window.max指的是相同的函数。在第二个调用中,this引用了M
function max(){
log(参数[0]);
返回此.max.apply(数学,数组.from(参数[0]);
}
log(最大值([1,32,42,1]);
/*
这是控制台的输出:
------------------------
[1, 32, 42, 1]
1.
-无穷大
*/
其中此
指的是窗口对象,因此int只是递归调用相同的函数,因为window.max
指的是相同的函数。在第二个调用中,this
引用了Math
,因为您在中被定义为Math
。递归调用max函数时,第一个参数为1
,并创建一个空数组,因此返回-无穷大
要使其正常工作,请将此
替换为数学
对象,尽管这根本不是必需的
function max() {
return Math.max.apply( Math,arguments[0]);
}
或者简单地将数组作为普通参数传递
function max(arr) {
return Math.max.apply(Math, arr);
}
使用Math.max.apply
function max() {
//console.log( arguments[0] );
return Math.max.apply( Math, arguments[0]);
}
在这个方法中,这个
引用了@JaydipJ提到的窗口。如果要传递数学对象
function max(){
var x=this.max.apply(null,[0,1,2,3]);
console.log(x);
}
max.apply(Math);
由于Function#apply
第二个调用是否等于Math.max([])
?此
引用窗口
,全局函数
是窗口对象
的属性<代码>函数#应用
调用函数时,将传递的此
参数作为此
上下文调用被调用函数
使用参数[0]
而不仅仅是常规参数有什么特殊原因吗?数组的要点是什么。从(参数[0])
,不只是写vals
,其中vals
是函数的参数?@torazaburo是的,您是对的,我们可以按原样使用参数[0]而不是数组。从(参数[0])
,谢谢;)抢手货
function max(){
var x=this.max.apply(null,[0,1,2,3]);
console.log(x);
}
max.apply(Math);