专栏首页路过君BLOG from CSDNJS 变量作用域导致的一个坑

JS 变量作用域导致的一个坑

错误的案例:

funcA = function(){
	var obj = []
	var numbers = [];
	for(var i = 0;i < 100;i++){
		var number = numbers[i]= i;
		obj[i] = {
			doSomething: function(){
				console.info(number);
			}
		};
	}
	for(var i = 0;i < 100;i++){
		obj[i].doSomething();
	}
}
funcA();

上述代码执行将输出100次99,而非0~99

原因:var声明的变量作用域在函数内部

for并非一个函数,变量number的作用域在funcA

解决方案:

funcA = function(){
	var obj = []
	var numbers = [];
	for(var i = 0;i < 100;i++){
		const number = numbers[i]= i;
		obj[i] = {
			doSomething: function(){
				console.info(number);
			}
		};
	}
	for(var i = 0;i < 100;i++){
		obj[i].doSomething();
	}
}
funcA();

注意: ie11和以前的版本不支持let,ie10和以前的版本不支持const

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring cloud笔记 oauth2授权服务 clientDetails配置源码

    路过君
  • extjs 部署时动态切换上下文路径

    路过君
  • EXTJS7 自定义分组规则

    路过君
  • 哈佛联合MIT研究证明:抗生素会直接削弱人体的免疫系统 | 黑科技

    镁客网
  • .Net Core在Middleware中解析RouteData

    在ASP.Net Core中,如果直接在Middleware中获取RouteData返回的是空值,这是因为RouterMiddleware还没执行。但有些情况下...

    Mr. Wei
  • 微信小程序开发:canvas 多行文字换行(二)

    微信小程序开发中,canvas画出一篇文章,由于句子长短不一,画起来确实是费劲,查了不少资料,总结一下:

    田超
  • js循环POST提交添加辅助单位

    landv
  • 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/DDD_6.htm...

    Zachary_ZF
  • three.js中场景模糊、纹理失真的问题

    在three.js场景中,有时会遇到场景模糊,纹理失真的现象,似乎three.js并没有用到纹理图片应有的分辨率。可以通过相关设置来解决这个问题。

    charlee44
  • JS实现clone()方法,对五种主要数据类型进行值复制

    apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 ...

    李才哥

扫码关注云+社区

领取腾讯云代金券