javascript 函数作为参数名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 函数作为参数名相关的知识,希望对你有一定的参考价值。

以函数操作参数名,请问, 如果函数本身就有参数的, 那该如何传递?
请给出一个简单的例子
上面打错字了,
应该是: 以函数名作为参数,请问, 如果函数本身就有参数的, 那该如何传递?
如果,参数的个数是可变的,能实现吗?

你可以直接传递函数名作为参数,只是不要加括号


function funcOne(str)
    alert(str);

    
// 这里传过来 funcName 为 funcOne, param 为 funcOne 的参数
function funcTwo(funcName, param)
    // 等于调用 funcOne("hello")
    funcName(param);

    
// 调用 funcTwo 函数
// 将函数 funcOne 作为参数传递给 funcTwo
funcTwo(funcOne, "hello");

追问

如果,参数的个数是可变的,能实现吗?

追答

可以,在函数内使用 arguments 获取参数,然后使用 apply 调用函数

// 这里不需要填参数,因为在函数内可以使用 arguments 获取参数
function funcOne()
// 这里使用 arguments 获取全部参数
// 处理、、、arguments[0], arguments[1], arguments[2]
// 或者循环 arguments 进行处理


// 这里不需要填参数,因为在函数内可以使用 arguments 获取参数
function funcTwo()

// 参数 0 为函数名
var func = arguments[0];

// 剩余的参数为需要传递给 funcOne 的参数
var args = Array.prototype.slice.call(arguments, 1);

// 调用函数,并传递所有参数
func.apply(this, args);


// 这里的参数长度可以为任意,类型可以为任意
funcTwo(funcOne, "hello", "world", "foo", "bar");

参考技术A 函数作为参数有两种。。
第一种将涵数的返回值做为另一个涵数的参数。。看下面的例子
function demo(a,b)
return a+b;


function test(one)
return one+2;



//调用涵数demo 并且将test涵数的返回值作为demo涵数的第一个参数,
//在这里test涵数的返回值为:放5传到test涵数中去。返回值为7,再将7和8传到demo涵数中。
//返回值就为15

var result=demo(test(5),8);
alert(result); //弹出15

//第二种将涵数体作为另一个涵数的参数
function sum(a,b)
return a(b); //在这里如果第一个参数为涵数所以我们就可以直接把a当作一个涵数来处理


function one(n)
return n+10;



//调用sum涵数将涵数one作为sum涵数的第一个参数
var r=sum(one,10);
//这里one是sum的的参数,又是一涵数。。one涵数在sum涵数时的作用是处理sum涵数的第二个参数,sum涵数的结果所以会把10传到one涵数内返回。结果为20
alert(r); //弹出结果20
参考技术B 简单的举个例子。测试环境 win7+ie8+chrome
<script type="text/javascript">
function Add(x,y)
alert(x + y);

function Sub(x,y)
alert(x - y);

function CallFunc(Fun,x,y)
if (Fun && (typeof Fun == "function"))
if (x && y && (typeof x == "number") && (typeof y == "number"))
Fun(x,y);
else
console.log(typeof x);


else




CallFunc(Sub,5,3);
</script>追问

如果,参数的个数是可变的,能实现吗?

追答

可以用arguments来实现。

function Test()
for (var i = 0; i < arguments.length; i++)
alert(arguments[i]);



Test(1, 2, 3, 45, 6);

本回答被提问者和网友采纳
参考技术C

我的理解吧,把1个函数做参数就是把这个函数整体作为1个对象来用,而你的操作只是在主函数body中调用这个对象而已。我以前这么用是在做异步的时候需要在返回数据后调用方法,因为操作可能不一样,所以传函数,大致就如下面这个。

var fun1 = function(a,b)
    alert(a+b);

var fun = function(fun1)
    //此处你可以调用fun1
    fun1(1,2);

追问

如果,参数的个数是可变的,能实现吗?

追答

可以吧,我只知道,function(param1,param2,param3),类似这种多个参数的,你在调用时可以按顺序,只写其中几个参数或不写都可以调用的。如果是在fun1中参数不确定,你可以单独封装1个对象,把你的所有参数作为属性动态的赋给封装的那个对象,然后把封装的对象当参数传过去。

参考技术D 可以这样子:
function aaa(ar)
//这里是函数执行代码



传参这样传:
function bbb(aaa,ar) //aaa为上面的函数, ar为要为它传入的参数

aaa(ar); //执行aaa函数

追问

如果,参数的个数是可变的,能实现吗?

追答

什么都可以啊,关键是你aaa()函数里的代码怎么写,只要里面的代码没问题,那肯定没问题

以上是关于javascript 函数作为参数名的主要内容,如果未能解决你的问题,请参考以下文章

理解回调函数

js中eval()的使用说明

javascript基础函数4.1

如何证明JavaScript中函数参数都是值传递

JavaScript学习:JavaScript语法

javascript的函数相关属性和方法