Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与apply调用相关的问题_Javascript_Arrays - Fatal编程技术网

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);