执行以下程序,下列选项中,说法错误的是()
function fn(){
var num = 0;
return function(){
console.log(++num);
}
}
var fun = fn();
fun(); ...①
fun(); ...②
A
程序存在闭包现象
B
匿名函数的this指向window对象
C
①式输出1
D
②式输出1
正确答案:D
官方解析:
A选项,闭包需要满足以下特征:
(1)有外层函数嵌套内层函数;
(2)内层函数使用外层函数的局部变量
(3)内层函数返回外部,并且被全局变量保存,因此A正确;
B选项,匿名函数的this指向window对象,B正确;
++num为前置自增,因此①式输出1,
又因为num为闭包变量,会保存在内存中,再次调用fun()会继续自增,因此②式输出2。
A.fn()包着一个匿名函数function,形成闭包 正确✅
B.只要是fn()这种形式执行的,this都是默认绑定指向window✅
(this的四种绑定 默认、隐式、显式、new绑定)
C.fun(); ...① 值为1,num先自增1后赋值 值为1 正确✅