Mr.J--JS学习(闭包及IIFE)

本文通过一个示例介绍了JavaScript中的闭包问题,演示了为何在for循环中使用闭包会导致预期外的结果。解释了闭包的概念,作用域以及变量绑定。接着,文章讨论了如何利用立即执行函数(IIFE)来修正闭包问题,详细解释了函数声明、函数表达式和匿名函数的区别,并展示了IIFE的两种常见写法。
摘要由CSDN通过智能技术生成

     首先,一个小小的题目:将10以内的数字进行输出。相信大家看到这个题目一定会感到非常熟悉,这不就是一层简单的for循环吗? 不就是这样一段demo:

   

function test1(){
			var count = 0;
			for(var i =0; i < 10;i++){
				document.write(i+" ");
			}
		}
		test1();

   运行结果就是:0 1 2 3 4 5 6 7 8 9   

    相信上面的题目只要学过编程的人都会轻松的写出来。那么题目要求改变一下:要求输出一个数组内的10个函数的索引值。函数索引值?直接把数组角标输出不就行了,比上面多两行代码而已,代码如下:

function test(){
			var arr = [];
			for(var i = 0;i < 10;i ++){
				arr[i] = function(){
					document.write(i + " ");
				}
			}
			return arr;
		}
		var myArr = test();
		for(var j = 0;j < 10;j++){
			myArr[j]();		
		}

 

从上面的代码可以看见:使用for循环给数组内储存十个函数,并调用函数再次使用for循环输出。看起来简直天衣无缝。但是....运行结果却是这样的:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值