javascript函数的问题
巴扎黑
巴扎黑 2017-04-11 11:25:51
[JavaScript讨论组]

看见一个教程上面写着:

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

举例:

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

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

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

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

巴扎黑
巴扎黑

全部回复(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

PHPz

就是定义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() 加入到自己的函数作用域中。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号