不太明白,请老师指点
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>什么可以做返回值</title>
</head>
<body>
<script type="text/javascript">
// 在此处补充代码
function count(){
var num=1
return function(){
return num++;
}
}
console.log(count())
// console.log(count()())
// console.log(count()())
// console.log(count()())
// console.log(count()())
var fn=count
var fn2=count()
console.log(fn)
console.log(fn())
console.log(fn2)
console.log(fn2())
console.log(fn2())
console.log(fn2())
console.log(fn2())
console.log(fn2())
// console.log(fn)
// console.log(fn)
// console.log(fn)
</script>
</body>
</html>
问题1:变量F2中是不是保存两个值,我可以不可以理解为类似对象这样,一个是FN2.NUM和fn2.function,两个,所以每次执行的时候 会对num改变?
类似以下情况:
fn2={
num:1,
return:function () {
return fn2.num++
}
}
问题2:count()()是函数,所以运行完一次以后垃圾回收,里面的num永远都是1,而FN2类似于一个对象,不会被垃圾回收?
正在回答
同学你好, 整体理解有一点偏差,主要是从函数的作用域方向去考虑哦, 可以参考下面的解释
当执行 fn2 = count() 这句代码的时候, 会在系统中创建一个关于count函数作用域, 这个作用域中保存的有变量num, 一个函数fn2
执行调用fn2的时候,生成一个fn2的函数作用域, 在这个函数内部使用了count作用域中的num值, 所以count函数作用域一直存在,不会被销毁, 站在fn2的角度看, 此时的count就是一个全局作用域, 每次调用fn的时候, 就会更新num的值,
老师这里简单画个图帮助你理解,
综上, 可以看出, 是因为count函数作用域中num一直被引用,所以该作用域不会被销毁哦
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~~
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星