问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript闭包的3个问题

发布网友 发布时间:2022-04-23 01:16

我来回答

5个回答

热心网友 时间:2022-04-18 10:57

第一个不是闭包,是匿名函数。。。
因为隔了一秒后,循环已经执行完了,你去掉延时执行就能看到每步打印的数据了;

第二个也不是闭包。。。
因为js的执行环境是先初始化变量,再按顺序执行,很明显a函数执行的时候,循环已经结束了,所以获得的值也就是3

第三个是返回的最后一个执行完的b函数,而b函数里边的i是索引的最后一个i,所以执行就是一个3

对于你补充的3的答案,还是那句话,b函数获取到的是最后的i了

建议楼主去了解下js的作用域链方面的知识追问我已经看了一下js的作用域链方面的知识 ,也看了一些网友的介绍,我感觉是不是内函数执行的时候如果本身没有定义i这个变量,就回去外函数寻找i,而此时的这个i为什么就是最后的i?是不是当执行b时,a已经执行过了?

追答对,作用域链有些类似原型链,当在自身域找不到相关的变量时,就会往上一级查找,直到到达顶级object;
可以这么理解,b获取到是执行后的值;

热心网友 时间:2022-04-18 12:15

1. 因为执行时是异步的,当它执行时,去取变量 i 的值,这时 i = 10. 所以每次都是 10. setTimeout 后延迟 1 秒执行,1 秒内 for 循环肯定执行完了,所以 i = 10. 要注册异步执行时,创建 closure 时只给出变量符号名,执行时才去取这个变量的值,为了能把当时的值复制过去,我们需要创建一个对象将这个值复制一份。
<script>
var Handler = function(no){
var _no = no;
this.run = function() {
alert(_no);
};
};

for(var i=0;i<10;i++){
setTimeout(new Handler(i).run,1000);
}
</script>

2. 因为 for 循环里面把 a 这个函数重新定义了 3 遍,你只能使用最一次的定义。
3. 问题3参考问题2,一样的道理,重新定义过 3 次,只能使用最后一次的定义。

热心网友 时间:2022-04-18 13:49

每个对象都有一个作用域链,作用域链上有从当前对象作用域到最外层也就是window的作用域。
依次向下访问,而作用域链上保存的是整个变量对象而不是某个特殊的变量。所以你只能访问到你外层对象的最终值,也就是该对象已经执行完了以后的值。如果想获得每一个值,可以用匿名函数
for(var i=0;i<3;i++){
(function(){
function b() {
alert(i);
}
})(i);
}
每次循环把值传给匿名函数就行了,这种情况很常见。
javascript高级程序设计第三版 P181 讲过
楼主给分

热心网友 时间:2022-04-18 15:41

1-for循环相当定义了10个setTimeut(),而内部函数只取最后一个值,这个值为10,故弹出10次10;
不是闭包.
2也不是闭包.如果要循环,用匿名函数可以这样
for(var i=0;i<3;i++){
(function a(i) {//注意这里
alert(i);
})(i)//注意这里,传入每次循环的i值来保存现场
}
3是闭包.由于返回的b闭包是a运行后的结果,故此时内部for循环早已循环完,i最终值为3,所有
myF()也只能读取到最终值 3

热心网友 时间:2022-04-18 17:49

你的java有很大的问题新下一个吧!追问什么意思?我问的是js

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胶原蛋白线双眼皮是不是永久性 双眼皮埋线是蛋白质还是尼龙绳-双眼皮埋线蛋白线多久能吸收 人体输液的“港口”完全植入式输液港 双眼皮宽变窄修复的方法 同心保家庭重疾险靠不靠谱?便宜吗? 做完双眼皮一宽一窄怎么办 喝全脂奶粉对长高有没有什么好处? redmine中“选择一个项目..."下拉列表框中为什么只列出一个项目,我建... 南充市龙门中学实力现在怎样?他的奥赛班是重点班么? 感情中为什么总是不知足呢? JavaScript 里的闭包是什么?应用场景有哪些 JS闭包的概念 JavaScript的闭包问题! 电脑中的WPS文字题插入图片后,怎样才能为文档中所有图片应用基于“正文”样 javascript闭包题目的疑惑,是怎么回事? javascript闭包是什么? javascript闭包问题 wps 环境下,在某一章中插入图的题注,编号变成了一.1,怎么让编号变成1.1... javascript的闭包问题 WPS中插入的图片后,怎么在图片上写字或是做重点标记? javascript的闭包是什么意思 有什么用 JavaScript闭包,什么是闭包,对闭包的理解 javascript怎么实现闭包 请问用wps如何自动插入题注? JS闭包是什么东西? wps/word 给同行的两个图片加题注 求助:WPS中给图片加题注,却只能显示0.1??? 什么是JS闭包?求详解 WPS word里如何给图片写题注为2-1、2-2、3-1、3-2、3-3……之类的 ,并且在目录环节引用插入表目录 理解什么是JS作用域,闭包和基本的JS作用域面试题 一个javascript的闭包问题,求详细解释 JavaScript 闭包好处是什么?为什么用到闭包 华为手机型号是TlT一AL00,是华为畅享5吗 华为型号HuAWElTlT一TL00支持联通4G网络吗? 华为型号HuAWElTlT一TL00可以支持联通4G网络吗? 华为tlt-tl00怎么恢复出厂设置 华为手机tlt一al00触摸屏 l42a71c怎么看卫视央视直播 tcl l40a71c电视不用第三方软件怎么看直播? TCL L42A71C 网络安卓电视!不需要机顶盒!直接插网线就可以用吧 tcl l42a71c爱奇艺这款电视好不好? 今天去国美苏宁转了下,想买个电视,个人比较喜欢TC tcl42a71c无线鼠标键盘怎么连 tcll42a71c指示灯不亮屏不亮主板供电正常是不是驱板坏了? TCLl42a71c智能液晶电视闪屏图像朦朦胧胧是什么原因? tcl l42a71c怎么连电脑操作 tcl液晶l42a71c图像人物比如头发,眼睛,总之图像比较暗或黑色的部份发绿是什么原因? TCLL42A71C上面三分之一图像黑,蓝屏上面三分之一有线条干扰 tcl彩电l42a71c是不是4k电视 l42a71c电视怎么获取root权限 tcll42a71c电视突然黑屏 按键没反应