函数
- 函数定义: function
- 函数执行: 函数名加 ()
- 参数
- return 终结 条件 并 可返回值
形参和实参
形参作用:接收实参,供方法体使用
实参作用:向方法体传值
实参如果为【定义的函数】,则这个函数是回调函数
方法体
- var 定义的变量,只有在方法体中声明的变量为局部 的,其他一律为全局的
- 方法体中变量:执行完毕后就会被释放,不会在内存中保持
变量局部作用域形成时间,在函数定义时,
return
- 函数的【返回值】
结束语句:return 下所有语句都不会被执行
- 返回值,只有函数执行时才能出现
- 应用
把函数完成一个功能,结果【告诉外界】—> 外界用变量接收
函数的调用
- 函数每调用一次,方法体会执行一次,执行完毕,释放空间
- 函数可以重复调用
回调函数
js 是同步的语言,执行顺序是冲上往下的
回调函数是异步的。
代码的执行顺序分为 : 同步 异步
同步 弊端: 会发生执行阻塞
异步:不会发生阻塞
异步:未来某一时刻需要执行的大妈,优先执行,同步是按照代码的编写顺序从下执行,异步不会顶戴其他代码执行,所有的代码,谁快谁执行
js中异步
回调函数 promise 对象ES6内容, async await(ES7) 现在课堂学的是ES5
回调函数:一个定义的函数,作为另一个函数的实参 传入 到另一个函数中,
回调函数的执行:分为自动执行和 手动执行
自动执行: 针对一些内置的API 自动触发,例如 sort
手动执行: 自定义的函数 传入的回调函数,需要我们自己写 xx 来触发
回调函数的优点:他是异步处理程序
缺点:容易形成回调地狱,代码让人看不懂。在ES7 promise 对象解决【回调地狱】问题。
有弊端, .then (链式结构繁杂)
推荐: async await [同步写法异步程序,离不开 promise ,因为 await 后 必须是 promise 对象]
异步学习方法
1: 异步是什么时候开始的
2:异步是什么时候结束的
3: 异步结束后是如何告诉外界的
4:外部接收到信号后,做什么
关键字:promise
- 当函数作为实参传入时—>决定了【异步程序】
2.当回到函数执行时候—> 【异步开始了】
3.当回调函数方法体大妈执行完毕或者有【返回值】时 - 外界只要姐搜到【返回结果】 或者执行完毕效果 ----> 【外界已经知道异步执行完毕】
- 异步执行完毕后,外界开始处理其他函数
回调函数:伪异步
回调函数学习注意事项
1:将来看到代码,【形参名字()】 ----> 该形参接受实参为【函数】—回调函数
2:注意形参的名字与实参的名字不是一个, 相当于将 实参【函数名】重新赋值给【形参callback】—>形参callback 的值为定义的函数,【等待执行】
3:第一步首先要知道 形参接受的是【哪个函数】—>才能知道执行了哪个回调函数
------> 方式一:通过找到实参,找到形参接受的函数
------> 方式二:通过方法体打印形参,知道接受的是哪个函数;—>知道触发是哪个函数
4:回调函数在执行时候,也可以传入实参,按照上面的顺序,找实参找函数/变量,看至执行
5:不要纠结执行顺序问题,只要会找传入的函数就可以了。
回调函数–> 解决方法 promise对象 --> 过多.then —> async await
\3. 难点: 在回调地狱中,不能清晰分清执行哪个函数
解决方式:1 打印输出
fn(call);
function fn(a){
a(call2);
console.log('一个')
}
function call(callback){
callback(call3)
console.log('回调1')
}
function call2(callback){
callback();
console.log('回调二')
}
// call3(call2);
function call3(callback){
// callback();
console.log('333333333333333')
}
/*
333333333333333
07回调函数.html:72 回调二
07回调函数.html:67 回调1
07回调函数.html:62 一个
*/