正是因为JavaScript函数可以作为变量、方法参数、方法返回值等使用,还可以函数套函数,给JavaScript带来了巨大的“灵活性”,也带来了超级多的麻烦……
函数作为JavaScript中的 头等公民,化身万千,无所不在!JavaScript与其说是面向对象的,不如说是“面向函数”的。
调用JavaScript的函数,语法上并不要求参数匹配:
所以不匹配咋办呢?凉拌,ʅ(‾◡◝)ʃ
function sum(a, b, c) { return a + b + c; }
演示:
这其实是个“伪概念”。
JavaScript是解释型语言,传统上解释型语言的执行就是“从上到下”一行一行,边解释边执行的,
但是JavaScript的中由function定义的命名函数(不包括赋值给变量的匿名函数),可以“先使用,后声明”(演示),怎么解释?函数提升了哟……¯\_(ツ)_/¯
@想一想@:编译和解释的真正区别是什么?
回调函数(callback)是可以带参数的。
function callback(sname) { console.log("I'm a callback function with name" + sname); }但将callback传递给调用函数(main)时,写法是这样的:
function main(func) {
参数去哪儿了呢?@想一想@:这样行不行?为什么?
main(callback('飞哥棒棒哒'));
当然可以修改main()的定义,额外再接受一个参数:
function main(func, para) {
但有时候main()是不能修改的!所以更常用的一个小技巧,是用一个匿名函数包裹原来需要被调用的函数:
main(function(){ //无参 callback('飞哥棒棒哒'); })
这种方式不用改变main()函数的定义,就可以把任意函数及其参数传递给main(),非常好用!
但有时候main调用一个匿名回调函数,这种写法:
main(function (sname) { console.log(sname); });
也让很多同学懵逼:参数sname干嘛的,哪儿来的,它有什么用?
这时候要理解:sname是在main()函数中生成的,比如:
function main(func){ let teacher = "飞哥"; //main函数中生成 func(teacher); }
main“知道”func可以有一个参数,调用func的时候会传入相应的参数。
而sname具体代表什么,只能问main(),通常是通过“文档”(说明)获得。
完成编程语言-面向函数中作业第3题。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: