老师,有个疑问

老师,有个疑问

<!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>
let arr = []
for (let i = 0; i < 5; i++) {
arr.push(function () {
console.log(i);
})
}
arr[0]()
</script>
</body>

</html>

问题描述:

这样在外部调用函数时能访问到i,是不是也是因为形成了闭包呢?

只不过外环境变成了块级作用域,而不是函数了

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,在外部调用数组中的某个函数时,此时会形成函数作用域,在函数中访问变量i,首先会在函数作用域中查找变量i是否存在,如果不存在的话会向外一层查找,此时会在块级作用域中查找到变量i,如图

http://img1.sycdn.imooc.com//climg/60d2f6170908221913070739.jpg

祝学习愉快!​

  • __Promise 提问者 #1

    老师,我是想问这个块级作用域是这个函数的闭包吗?

    因为是在块级作用域外部调用的内部的函数.最后访问的是创建函数时块级作用域中的值

    2021-06-23 17:01:28
  • 好帮手慕然然 回复 提问者 __Promise #2

    同学你好,此时块级作用域相当于与函数闭包的作用,但它俩不是一个概念。祝学习愉快!

    2021-06-23 17:56:24
  • 好帮手慕然然 回复 提问者 __Promise #3

    同学你好,再回答一下这个问题,这段代码是形成了闭包,可以在外部调用内部函数访问变量i(块级作用域代替了函数)。祝学习愉快!

    2021-06-23 18:51:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师