看见一个教程上面写着:
在JavaScript中,一个函数可以作为另一个函数接收一个参数。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。
举例:
function say(word) {
console.log(word);
}
function execute(someFunction, value) {
someFunction(value);
}//这里不太明白
execute(say, "Hello");//会log出“Hello”
execute()函数是怎么执行的呢?他的参数是someFunction和value,可是他的里面又是调用someFunction(),这个someFunction()的函数体没有啊?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
someFunction就是传过去的say啊。。。讲道理嘛
so easy, 最基本的东西,打出来看看就知道了。
someFunction 就是 say
就是定义execute这个函数有两个行参 ,其中一个参数是另一个函数的指向,并在execute函数体内调用作为参数传入的那个函数,另一个参数的值是前面那个参数函数的参数。这就是前面两个函数的流程,后面execute(say, "Hello");就是指调用执行execute函数了,其中两个参数值也传入实参。其中第一个实参就是指向前面定义的say函数,第二个实参就是传入say函数的参数。然后再调用say函数。就是这样的啊
say是函数名,他是一个指针指向函数
把say传递给execute后,someFunction的指向就和say的指向是一样的
类似于创建一个函数:
楼主应该是被函数名称改了一下所迷惑了,函数名称名字无所谓,其实就是传了一个函数的引用过去。
我也在学习中,试这说一下我的理解
这不就是传说中的回调函数
执行
execute(say, "Hello");他的时候,传实参say()和"Hello"进入execute()这个函数,someFunction这个形参其实就是回调函数say(),形参value的实参就是"Hello",然后执行say()这个函数,他的实参就是value,所以就打印出来了Hello,不知道我理解得对不对首先,javascript中函数也是对象。这里将函数看作是对象就比较好理解了
execute方法接受两个参数,第一个参数是一个对象(也就是你传入的say方法),第二个参数是输出的值
在execute方法里,在组装了这两个穿进来的参数,执行参数1方法,并将参数2作为参数1方法的参数。
可以翻译为:斜体文字
function say(word) {
console.log(word);
}
function execute(someFunction, value) {
var someFunction = say; // 得到句柄
someFunction(value);
}
在execute() 运行的时候会把say() 加入到自己的函数作用域中。