删除全局变量

时间:2011-10-14 18:05:58

标签: javascript

我使用limejs并声明了一个类似的函数:

function up(){
   var pos = global.getPosition();
   pos.x += 2;
   global.setPosition(pos);
}

并使用

调用它
lime.scheduleManager.schedule(up,global);

如何摆脱全局变量?

5 个答案:

答案 0 :(得分:7)

你可以随时删除对象上的属性(注意全局变量实际上在window,至少在浏览器javascript中)

delete window.global;

如果您尝试访问变量,则会收到Reference错误。要小心,因为如果你的schedule调用稍后调用该方法,并且它依赖于全局,它将会消失。可能只是使用局部变量(var

enter image description here

答案 1 :(得分:1)

如果您没有在其他地方引用该功能,为什么不呢:

lime.scheduleManager.schedule(function (){ 
   var pos = global.getPosition(); 
   pos.x += 2; 
   global.setPosition(pos); 
}, global); 

答案 2 :(得分:1)

由于schedule的第二个参数是上下文对象,并且您将global传递给它,您可以将该函数编写为

function up(){
   var pos = this.getPosition();
   pos += 2;
   this.setPosition(pos);
}

如果这确实是你所要求的。

如果您只需要删除变量,则可以将其设置为null。运算符delete用于删除对象属性,而不是取消设置变量。

答案 3 :(得分:0)

如果你的意思是标记它可以被垃圾收集,你可以将引用设置为null。如果没有其他引用,则下次gc启动时该对象将被gc'd。

答案 4 :(得分:-1)

在常规JavaScript中,它将是:

delete global.myVar

delete pos

不是100%确定这是否适用于limejs(从未使用过),但值得一试。