for循环经典问题

经典问题解析

for循环变量提示的问题

我们在进行dom树绑定循环依次执行的时候,会不会出现所有点击的数都是最后一个的情况,当时我很是懵逼,最近刚好有时间谢谢博客,就把我的见解给贴出来:

涉及的知识点:

闭包,作用域,var声明,预解析变量提升的问题

我们首先要知道一个概念:
1 函数在执行的前一刻会有一个预解析的过程:
这里的预解析会让函数内的变量提升和该函数内的函数声明提升
当然了首先是生成argument 对象,argument保存的是实参

我们要知道闭包的概念:
1 返回一个函数,通过这个函数对外部的函数的变量进行操纵…
看到这篇文章的,如果这部分知识不太理解的,可以去看关于
(AO/GO/VO/scope作用域/this的问题)

前面说过var声明在预解析阶段会进行变量提升

比如我想要让函数执行的话,我们需要给函数加上一个函数执行符号()
但是我们这里是想让函数输出一个数组
var arr =[];
for(var i =0 ;i<10;i++)
{
var arr = function()
{
document.write(i+’ ');
}
}
我们让给数组填入相应的函数
注意我们这里并不是函数的执行,而是函数的声明
也就是说只是存入但是并不执行
我们将这个arr数组return出去

用一个变量newArr 去接收
然后进行循环一次执行
for(var i = 0;i<10;i++)
{
newArr’[i]’();
}
函数的执行

全部的语句是这样的
我们在没有解决问题之前,会有一个问题,for循环以后定义了每一个函数表达式,但是这些表达式并没有执行,而是继续进行迭代,当for循环执行完以后,我们返回arr数组,然后挨个进行执行,但是并不是我们想要的0,1,2,3,4,5,6,7,8,9,而是全部都是10,这是因为for循环已经执行完了后外面的函数访问里面的属性的时候i已经是10了,所以取到的结果都是10,我们解决问题的方法就是立即执行函数,程序一开始运行就立即执行,这样我们取到的每一个值都是已经迭代过好的变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值