首页 > 试题广场 >

执行以下程序,下列选项中,说法错误的是() function

[单选题]

执行以下程序,下列选项中,说法错误的是()

function fn(){

var num = 0;

return function(){

console.log(++num);

}

}

var fun = fn();

fun(); ...①

fun(); ...②


  • 程序存在闭包现象

  • 匿名函数的this指向window对象

  • ①式输出1

  • ②式输出1

A.fn()包着一个匿名函数function,形成闭包 正确✅
B.只要是fn()这种形式执行的,this都是默认绑定指向window✅
(this的四种绑定 默认、隐式、显式、new绑定)
C.fun(); ...① 值为1,num先自增1后赋值 值为1 正确✅
D.fun(); ...② 值为2,闭包中的变量不会被垃圾回收,因为还保持着引用,因此num的值还是1,自增变成2 错误❌

发表于 2021-12-10 14:53:31 回复(0)
牛客网的解析
来源:牛客网
题目解析:
A选项,闭包需要满足以下特征:(1)有外层函数嵌套内层函数;(2)内层函数使用外层函数的局部变量;(3)内层函数返回外部,并且被全局变量保存,因此A正确;B选项,匿名函数的this指向window对象,B正确;++num为前置自增,因此①式输出1,又因为num为闭包变量,会保存在内存中,再次调用fun()会继续自增,因此②式输出2。
发表于 2022-01-28 10:55:31 回复(0)
回调函数赋值给外部变量fun,两次调用fun使用同一个地址,0☞1☞2 如果赋值给新的外部变量fun2,则是0☞1
发表于 2022-01-25 17:39:30 回复(1)
B选项“this指向”改成“this默认指向”也许会好一点~ 如果通过bind或者obj.xx等方式的话是会被改变的;或者说“匿名函数”改成“本题中的匿名函数
编辑于 2022-10-10 20:19:01 回复(0)