首页 > 试题广场 >

函数传参

[编程题]函数传参
  • 热度指数:59073 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
将数组 arr 中的元素作为调用函数 fn 的参数
示例1

输入

function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!']

输出

Hello, Ellie!
推荐
调用函数可以使用call或者apply这两个方法,区别在于call需要将传递给函数的参数明确写出来,是多少参数就需要写多少参数。而apply则将传递给函数的参数放入一个数组中,传入参数数组即可。
function argsAsArray(fn, arr) {
  return fn.apply(this, arr);
 }

编辑于 2015-08-18 21:02:22 回复(44)
function argsAsArray(fn, arr) {
 return fn.apply(this,arr);
}

发表于 2015-08-25 15:12:12 回复(1)
function argsAsArray(fn, arr) {
    return function(para1,para2){ 
        return  para1.apply(this,para2);
    }(fn,arr);
}
编辑于 2015-07-08 01:37:10 回复(2)
js:
function argsAsArray(fn,arr){
    return fn.apply(null,arr)
}

发表于 2015-07-08 22:48:55 回复(2)
方法一:
function argsAsArray(fn, arr) {
    return fn(arr[0],arr[1],arr[2]);
}
方法二:ES6扩展运算符
function argsAsArray(fn, arr) {
    return fn(...arr);
}
方法三:apply :第一个参数:函数体内this的指向,第二个参数:接收一个集合对象(数组和类数组)
function argsAsArray(fn, arr) {
    return fn.apply(fn,arr);
}




发表于 2022-03-27 20:59:36 回复(0)
function argsAsArray(fn, arr) {
    return fn.apply(this, arr);
    return fn.call(this, ...arr);
    return fn(...arr)    
}

发表于 2022-01-06 17:04:57 回复(2)
function argsAsArray(fn, arr) {
    return fn.apply(this, arr)
}

发表于 2021-08-01 11:36:15 回复(0)
function argsAsArray(fn, arr) {
    return fn(arr[0],arr[1],arr[2]);
}
huaji
发表于 2020-03-24 17:57:41 回复(0)
调用函数可以使用call或者apply这两个方法,区别在于call需要将传递给函数的参数明确写出来,是多少参数就需要写多少参数。而apply则将传递给函数的参数放入一个数组中,传入参数数组即可。
functionargsAsArray(fn, arr) {
    returnfn.apply(this,arr);
}
发表于 2017-08-14 11:18:49 回复(0)
function argsAsArray(fn, arr) {
    return fn.apply(this,arr);
}

测试通过!

发表于 2017-04-10 15:04:49 回复(0)
function argsAsArray(fn, arr) {
return fn(arr[0],arr[1],arr[2]);
}
//最直接的方法
unction argsAsArray(fn, arr) {
     return fn.apply(this, arr);
}
//比较高级的方法,通过apply改变作用域

发表于 2016-08-22 21:18:43 回复(1)
function argsAsArray(fn, arr) {
     return fn.apply(this, arr);
}
发表于 2015-08-29 10:25:56 回复(0)
洁头像
function argsAsArray(fn, arr) {
	return fn.apply(this,arr);
}

发表于 2015-08-11 11:19:07 回复(1)
function argsAsArray(fn, arr) {
   return fn.apply(this,arr);
}
发表于 2015-07-20 10:45:34 回复(0)
function argsAsArray(fn, arr) {
return fn.apply(this,arr);
}
调用函数有3种方式:
obj.func();
func.call(obj,args);//参数列出
func.apply(obj,[m,n......]);//参数数组

发表于 2015-11-02 15:50:57 回复(1)

ES6方法:
function argsAsArray(fn, arr) {
    return fn(...arr)
}
测试通不过但是浏览器可以运行
发表于 2017-09-12 13:56:44 回复(13)

笨办法

function argsAsArray(fn, arr) {
  return fn(arr[0],arr[1],arr[2]);
}

用apply

function argsAsArray(fn, arr) {
  return fn.apply(fn, arr);
}
//或者
function argsAsArray(fn, arr) {
  return fn.apply(this, arr);
}

用call

function argsAsArray(fn, arr) {
  return fn.call(fn, arr[0],arr[1],arr[2]);
}
//或者
function argsAsArray(fn, arr) {
  return fn.call(this, arr[0],arr[1],arr[2]);
}
发表于 2017-09-22 16:44:39 回复(8)
一般情况下都是对象调用函数,但此处是函数调用数组对象,用call(), apply()。第一个参数是传给当前函数对象。但是call()需要将参数挨个列出,apply直接传入数组对象。

function argsAsArray(fn, arr) {
return fn.apply(this,arr);
}


发表于 2016-09-27 10:31:39 回复(0)
思路:每个函数都包含两个非继承而来的方法:apply()he call(),这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。首先,apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。
代码如下:
function argsAsArray(fn, arr) {
     return fn.apply(this,arr);
}
发表于 2016-06-23 21:46:40 回复(0)
function argsAsArray(fn, arr) {
	return fn.apply(null, arr);
}

不要随便绑定 ‘this’
发表于 2017-07-27 19:55:50 回复(0)
function argsAsArray(fn, arr) {
    if (fn.length !== arr.length){
        return '请检查函数fn/数组arr的输入是否符合标准!';
    } else {
        //return fn(...arr);
        return fn.apply(this, arr);
    }
}
好像牛客的测试对 ES6 的支持不够好,诸如let, ... 等新语法的写法都会报错,诸位还是使用call,apply吧。
编辑于 2018-10-15 09:05:02 回复(1)