zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Life Forms POJ
    Musical Theme POJ
    Long Long Message POJ
    ci框架多语言切换
    vi模式
    并发量
    运维技术规划
    Linux装mysqli.so
    任何一门语言思考的
    python例子
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294700.html
Copyright © 2011-2022 走看看