ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript:避免涉及大量循环的代码中的全局变量

2019-08-28 01:45:12  阅读:167  来源: 互联网

标签:javascript loops global-variables


我有一个非常令人困惑的问题.我认为最好用代码解释:

var length = 0; // I want to avoid this variable being global

function loop(array, func) {
	for (var i = 0; i < array.length; i++) {
		array[i].func(length);
		length += array[i].number;
		if (func) {
			func();
		}
	}
}

function bar(number) {
	this.func = function(len) {
		console.log(len);
	};
	this.number = number;
}

function main() {
	var array = [];
	for (var j = 1; j < 3; j++) {
		var foo = new bar(j);
		array.push(foo);
	}
	loop(array, function() {
		loop(array);
	});
}

main();

在其他一些代码中我有一个与此类似的循环.我根本无法弄清楚如何在这段代码中使长度变量局部变量.我无法将它传递给函数,因为它调用自身.我无法将它移动到任何地方,因为循环不断弄乱.

感谢您的任何帮助!

解决方法:

不确定你要完成的所有这些,但它看起来像main是循环的调用者,所以你可以让length成为循环的参数,并且主循环调用循环的初始长度为0并且有循环和回调返回改变的长度:

function loop(array, length, func) {
  for (var i = 0; i < array.length; i++) {
    array[i].func(length);
    length += array[i].number;
    if (func) {
      length = func(length);
    }
  }
  return length;
}

function bar(number) {
  this.func = function(len) {
    console.log(len);
  };
  this.number = number;
}

function main() {
  var array = [];
  for (var j = 1; j < 3; j++) {
    var foo = new bar(j);
    array.push(foo);
  }
  loop(array, 0, function(newLen) {
    return loop(array, newLen);
  });
}

main();

标签:javascript,loops,global-variables
来源: https://codeday.me/bug/20190828/1747023.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有