避免在Javascript中使用全局变量和函数
Avoid using global variables and functions in Javascript
如何更改下面的JavaScript代码,以避免将变量和函数暴露给全局作用域?
var nMax = 10;
var i = 0;
var step = function(){
//do stuff
i += 1;
if(i < nMax){
step();
}else{
alert('finished');
}
}
step();
理想情况下,如果能提供背后的原因,将不胜感激。
任何想法将非常感激!
只需将其封装在一个匿名函数中,并立即调用该函数:
(function(){
var nMax = 10;
var i = 0;
var step = function(){
//do stuff
i += 1;
if(i < nMax){
step();
}else{
alert('finished');
}
}
step();
})();
另一个例子:http://jsfiddle.net/n5Srd/
标准方式是
var step = function(){
var nMax = 10;
var i = 0;
return function() {
//do stuff
i += 1;
if(i < nMax){
step();
}else{
alert('finished');
}
};
}();
step();
使用闭包的另一种选择:函数是对象,因此您可以像其他对象一样为它们附加值:
function step()
{
step.i++;
if (step.i < step.nMax) step();
else alert('finished');
}
step();
或者,使用一个对象来命名函数和变量:
var stepper =
{
i: 0,
nMax: 10,
step: function ()
{
this.i++;
if (this.i < this.nMax) this.step();
else alert('finished');
}
};
stepper.step();
下面是@PaulPRO答案的一个更简洁的版本,它使用函数声明而不是函数表达式:
(function ()
{
var i = 0,
nMax = 10;
function step()
{
i++;
if (i < nMax) step();
else alert('finished');
}
step();
})();
放入一个对象,这样fn就会通过这个对象被调用:-
var stepHolder = {};
stepHolder.step = (function(nMax){
var i = 0;
return function step(){
//do stuff
i += 1;
if(i < nMax){
step();
}else{
alert('finished');
}
};}
)(10);
stepHolder.step();
相关文章:
- 在javascript函数中设置全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 创建要在其他函数中使用的全局变量
- 函数中的innerHTML(全局变量?)
- 全局变量只能由第一个函数访问
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 更改函数内部的全局变量而不调用它
- 如何制作全局javascript函数和变量
- 改进js代码以删除全局变量和函数
- 调用函数后如何重置全局变量
- 无法在函数中检索全局变量的值
- 将全局变量传递给自调用函数或“IIFE”的目的
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- 如何在 ajax 调用后更改包装器 JavaScript 函数中的全局变量
- 删除两个函数使用的全局变量
- 如何将socket.on中函数的值保存为全局变量
- angular/javascript无法识别函数内部的全局变量
- Javascript测试存根全局变量函数
- 在JavaScript中添加一个全局变量/函数(特别是NativeScript)
- Javascript从本地向全局变量函数添加行