js闭包的理解
js闭包,简单的就一句话:函数里再嵌套一个函数。
举个简单的例子:
function f1(){
var n = 123;
function f2(){ //f2是一个闭包
var x=3;
return x; //f2方法返回一个值
};
n=f2(); //将f2方法返回的值赋值给n变量
alert(n);
};
f1(); //运行
说明:
定义一个函数f1,并且在里面也定义了一个函数f2,f1不能访问f2里面的变量(除非f2将值return出来),也就是说,不能直接将f2中的变量值赋给f1中的变量,对于f1来说,f2里面的变量是封闭的,所以叫做闭包。例子如下:
function f1(){
var n = 123;
function f2(){ //f2是一个闭包
var z=789;
var x=n; //f2里面可以访问f1里面的变量
return x; //f2方法返回一个值
};
// n=z; 将会报错
var y=f2(); //将f2方法返回的值赋值给n变量
alert(y);
};
f1(); //运行
js回调函数的理解
js回调函数,也很简单,和闭包一样,也有两个函数,只不过不是包含嵌套的关系,而是并行的关系,一个函数运行完之后再调用另外一个函数。
举例:
function a(callback){ //callback参数,指的是回调函数
var m = 1;
var n = 2;
alert(callback(m,n));
}
function b(m,n){
return m+n;
}
a(b);
说明:
运行函数a,同时将函数b赋值给callback参数,运行到alert的时候,先运行括号里面的回调函数,也就是调用函数b(同时传参m和n值),最后再运行alert