javascript函数的问题

看见一个教程上面写着:

在JavaScript中,一个函数可以作为另一个函数接收一个参数。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。

举例:

function say(word) {
  console.log(word);
}

function execute(someFunction, value) {
  someFunction(value);
}//这里不太明白

execute(say, "Hello");//会log出“Hello”

execute()函数是怎么执行的呢?他的参数是someFunction和value,可是他的里面又是调用someFunction(),这个someFunction()的函数体没有啊?

阅读 4.4k
8 个回答

someFunction就是传过去的say啊。。。讲道理嘛

so easy, 最基本的东西,打出来看看就知道了。

function say(word) {
  console.log(word);
}

function execute(someFunction, value) {
  // 打印
  console.log('someFunction: \n', someFunction, '\n', 'value: \n', value);  
  someFunction(value);
}
execute(say, "Hello");


输出:
someFunction: 
 function say(word) {
  console.log(word);
} 
 value: 
 Hello

someFunction 就是 say

就是定义execute这个函数有两个行参 ,其中一个参数是另一个函数的指向,并在execute函数体内调用作为参数传入的那个函数,另一个参数的值是前面那个参数函数的参数。这就是前面两个函数的流程,后面execute(say, "Hello");就是指调用执行execute函数了,其中两个参数值也传入实参。其中第一个实参就是指向前面定义的say函数,第二个实参就是传入say函数的参数。然后再调用say函数。就是这样的啊

say是函数名,他是一个指针指向函数

把say传递给execute后,someFunction的指向就和say的指向是一样的

类似于创建一个函数:

var p1 = 2;
var p2 = 3;
add(p1 , p2); 

function add(a, b) {
    return a + b;  // 这里a类似于someFunction,p1 类似于你的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() 加入到自己的函数作用域中。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题