回调函数
1.什么是回调函数?
作为参数的函数就是回调函数!
例如:有两个函数A,B如果函数A作为B的一个参数传入B的话,那么我们就称A是回调函数。
//声明一个函数
function fn1(a){
a()
}
//再声明一个函数作为fn1函数的参数传入
function fn2(){
alert('我是一个回调函数')
}
fn1(fn2)
例子中的fn2就被称为一个回调函数
2.回调函数的用途
一般是某个行为或某件事之后的收尾处理,或者说对于不同行为结果,给出不同响应。
闭包【返回一个函数的函数】
1.为什么会产生闭包
函数作用域中声明的变量,在全局作用域下是无法进行访问的,但有时候我们又需要在全局中去访问函数内的变量,这个时候我们就需要用到闭包。
2.什么是闭包
在函数A中,再定义一个函数a,用子函数a去控制父函数A中的变量,调用父函数A时,将子函数a返回给调用者,这就称之为闭包。
//定义一个父函数
function A(){
var i = 1
//定义一个子函数输出父函数中的变量i
return function a(){
console.log(i)
}
}
A()() //此处调用一次A函数返回的是一个函数a所以需要在调用一次,所以有两次调用()
3.闭包的用途
1).可以让父级作用域访问到函数中的变量
2).可以让这些变量的值始终保持在内存中
//声明一个函数
function boss(){
var n = 100
//创建一个子函数,接收一个新的参数
function child(newV){
//对传入的参数进行判断,如果没传入新参数返回原来的n值,传入则返回新值
n = (newV == undefined) ? n : newV
return n
}
return child
}
var myFun = boss()
4.闭包需要注意的事项
因为闭包会将这些变量一直存储在内存中,这样对内存消耗极大,影响网页的性能,在IE中可能还会造成内存泄漏。
解决这个问题的方法:
如将当前变量的值设置为“null”,将变量的引用解除,当垃圾回收启动时,会自动对这些值为“null”的变量回收。