老师能看看我的思路哪里有问题吗
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function count(){
var num=1; //将num赋值为1
return function(){ //返回 匿名函数
return num++; //返回 num++ 既1++
}
}
document.write(count()()+'<br/>'); //count()()调用函数内部返回的函数 此处应该是匿名函数 num++ 1
document.write(count()()+'<br/>');//第二次调用 2
document.write(count()()+'<br/>');//第三次调用 3
var fn=count() //此处fn赋值给函数 count() 既 num++ 1
document.write(fn()+'<br/>'); //只调用一次 1
document.write(fn()+"<br/>");//只调用一次 1
document.write(fn()+"<br/>");//只调用一次 1
</script>
</body>
</html>
正在回答 回答被采纳积分+1
同学你好,理解有误:
1、如下代码中的多个count()(),彼此之间并没有关联,num不会相互影响:

函数调用会形成独立的作用域,每调用一次就会形成一个作用域。上图代码中,3个count(),会形成3个作用域,每个作用域中,都有一个num,num初始值都是1,并且都有一个匿名函数function(){ return num++}:

再次()时,则会执行每个作用域中的匿名函数function(){ return num++},这个匿名函数,会在自己所在的作用域中查找num:

所以三句document.write(count()()+'<br/>')的打印结果是一样的。
2、如下写法,3个fn()之间会相互干扰,因为它们操作的是同一个作用域中的num:

var fn=count()这句代码,是调用函数count,此时会创建一个作用域,而这个作用域中返回的函数function(){ return num++}则被变量fn保存起来了:

下面多次调用fn,则是操作同一个作用域中的function(){ return num++}:

进而操作同一个num:

所以num会累积:

祝学习愉快!

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星