学编程,来源栈;先学习,再交钱
当前系列: Javascript入门 修改讲义

复习:函数的普通声明函数式编程

正是因为JavaScript函数可以作为变量、方法参数、方法返回值等使用,还可以函数套函数,给JavaScript带来了巨大的“灵活性”,也带来了超级多的麻烦……

函数作为JavaScript中的 头等公民,化身万千,无所不在!JavaScript与其说是面向对象的,不如说是“面向函数”的。


参数匹配

调用JavaScript的函数,语法上并不要求参数匹配

  • 没有类型限制,所以就不存在类型匹配
  • 也可以多于或少于定义时的参数个数

所以不匹配咋办呢?凉拌,ʅ(‾◡◝)ʃ

function sum(a, b, c) { return a + b + c; }

演示:

  • sum(1,2):第三个参数没有传入,所以值为undefined,最后结果为NaN 
  • sum(1,2,3,4):多余的参数4直接忽略
  • sum(1,2,"3"):字符串"3"也是OK的,但结果是多少呢?


函数提升

这其实是个“伪概念”。

复习:编译 vs 解释 

JavaScript是解释型语言,传统上解释型语言的执行就是“从上到下”一行一行,边解释边执行的,

但是JavaScript的中由function定义的命名函数(包括赋值给变量的匿名函数),可以“先使用,后声明”(演示),怎么解释?函数提升了哟……¯\_(ツ)_/¯

@想一想@:编译和解释的真正区别是什么?

  • 编译:生成编译后文件,比如.exe、.dll、.java文件,计算机可以直接执行这些编译后文件
  • 解释:没有编译后文件,计算机直接执行源代码文件


回调函数的参数

回调函数(callback)是可以带参数的。

function callback(sname) {
    console.log("I'm a callback function with name" + sname);
}
但将callback传递给调用函数(main)时,写法是这样的:

function main(func) {

参数传递给调用方main

参数去哪儿了呢?@想一想@:这样行不行?为什么?

main(callback('飞哥棒棒哒'));

当然可以修改main()的定义,额外再接受一个参数:

function main(func, para) {

但有时候main()是不能修改的!所以更常用的一个小技巧,是用一个匿名函数包裹原来需要被调用的函数:

main(function(){    //无参
    callback('飞哥棒棒哒');
})

这种方式不用改变main()函数的定义,就可以把任意函数及其参数传递给main(),非常好用!

参数传递给callback()

但有时候main调用一个匿名回调函数,这种写法:

main(function (sname) {
    console.log(sname);
});

也让很多同学懵逼:参数sname干嘛的,哪儿来的,它有什么用?

这时候要理解:sname是在main()函数中生成的,比如:

function main(func){
    let teacher = "飞哥";    //main函数中生成
    func(teacher);
}

main“知道”func可以有一个参数,调用func的时候会传入相应的参数。

而sname具体代表什么,只能问main(),通常是通过“文档”(说明)获得。


作业

完成编程语言-面向函数中作业第3题。

学习笔记
源栈学历
键盘敲烂,月薪过万作业不做,等于没学

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 Javascript入门 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码