1.执行以下程序,下列选项中,说法错误的是(D)
function fn(){
var num = 0;
return function(){
console.log(++num);
}
}
var fun = fn();
fun(); …①
fun(); …②
A.程序存在闭包现象
B.匿名函数的this指向window对象
C.①式输出1
D.②式输出1
解析:
产生闭包条件:①函数嵌套 ②内部函数引用外部函数的数据(变量/函数)
闭包的作用:①使用函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期)
②让函数外部可以操作(读写)到函数内部的数据
常见的闭包:①将函数作为另一函数的返回值
②将函数作为实参传递给另一个函数调用
A选项,满足闭包条件,匿名函数function()内部的变量是来自于外部函数的fn()里的局部变量。B选项,匿名函数的this指向window对象。C选项,++num为前置自增,因此①式输出1,又因为num为闭包变量,会保存在内存中,再次调用fun()会继续自增,因此②式输出2.
注意:var fun = fn();得到的是个函数,因为fn() return的是一个函数,则后面的fun();进入的是function()函数而不会进入fn()函数。这也是自己做题的易错点。
javaScript之闭包
最新推荐文章于 2024-05-21 19:09:41 发布