在函数中,是可以使用函数名作为另一个函数的参数的,执行时相当于是对此函数的一次引用。
例如我们要创建不定参数数量的函数,最后一个参数是要执行的函数
var fn = function () {// 获取所有参数
var args = [].slice.call(arguments)
// 如果最后一个参数不是函数,则不继续执行下面的内容
var caller = args.pop()
if (typeof caller !== "function")
return
// 接下来是对所有参数进行操作
...
// 假设操作完了之后的变量数组仍为args,把这些变量置入要执行的函数中
caller.apply(this, args)
}
你可以直接传递函数名作为参数,只是不要加括号
function funcOne(str) {alert(str)
}
// 这里传过来 funcName 为 funcOne, param 为 funcOne 的参数
function funcTwo(funcName, param) {
// 等于调用 funcOne("hello")
funcName(param)
}
// 调用 funcTwo 函数
// 将函数 funcOne 作为参数传递给 funcTwo
funcTwo(funcOne, "hello")
调用函数时, 传递入的参数与顺序必须按照函数声明来排列, 所以调用doSomeThing时:
function doSomething(args,callback){somethingComplicated(args)
callback()
}
//第一个参数如果不需要传递,可设置为null
//function onEnd(){} 这种方法通常是声明一个函数, 将函数作为参数传递可直接传递函数名称,或者传递匿名函数
//传递函数名称
function onEnd(){
//code
}
doSomething(null, onEnd)
//传递匿名函数
doSomething(null,function(){
compute()
})