javascript 函数作为参数名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 函数作为参数名相关的知识,希望对你有一定的参考价值。
以函数操作参数名,请问, 如果函数本身就有参数的, 那该如何传递?
请给出一个简单的例子
上面打错字了,
应该是: 以函数名作为参数,请问, 如果函数本身就有参数的, 那该如何传递?
如果,参数的个数是可变的,能实现吗?
你可以直接传递函数名作为参数,只是不要加括号
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");
第一种将涵数的返回值做为另一个涵数的参数。。看下面的例子
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);
我的理解吧,把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 函数作为参数名的主要内容,如果未能解决你的问题,请参考以下文章