javascript中最合适的全局变量?

时间:2013-06-03 20:48:57

标签: javascript html

我按下按钮时执行的功能 我不希望用户连续两次执行该函数。所以我使用了window变量 我做了:

function a() {  
  if(window.infunction != undefined || window.infunction != null) {  
       return;  
  }  
  window.infunction = 'true';    
  //do stuff  
}  

在其他地方(按下另一个按钮)我重置:window.infunction = undefined

这是使用全局变量的正确方法(至少对我的需求而言)吗?

3 个答案:

答案 0 :(得分:3)

不,没有充分的理由为此使用全局变量。只需将所有代码包装在函数中以避免污染全局命名空间就足够了:

(function() {
    //all your code here
})();

但我认为更好的解决方案是在点击按钮时删除事件处理程序。这是一个例子:

HTML:

<button id="click_me">Click me</button>

JavaScript的:

function click_function() {
    alert('You clicked the button with ID ' + this.id);
}

function click_listener() {
    click_function.call(this);
    this.removeEventListener('click', click_listener);
}

document.getElementById('click_me').addEventListener('click', click_listener);


或者,一些JS库可以轻松分配仅触发一次的处理程序。 事实上,我强烈推荐这个:你不必输入几乎相同的代码。例如,使用jQuery时,您只需编写:

$('#click_me').one('click', function() {
    alert('You clicked the button with ID ' + this.id);
});

这与上面的代码完全相同,只是它与更多浏览器兼容,包括旧版本的IE。

答案 1 :(得分:3)

功能是对象。它们可以具有与任何其他对象类似的属性:

function a(){
    if (a.executed) return;
    a.executed = true;

    //do stuff
}

正如@Ian在他的评论中提到的,你可以轻松地使函数可重用。这种做法既有利也有缺点。

正如@Dave所说,可以通过关闭来实现:

var a = (function (){
    var executed = false;

    return function (){
        if (executed) return;
        executed = true;

        //do stuff
    }
})(); 

答案 2 :(得分:0)

禁用该按钮或将其隐藏,以免用户在第一次点击后按钮无效的原因感到困惑。

function a(e) {
     e = e || window.event;
     e = e.target || e.srcElement;  
    // disable element
    e.disabled = true;
}


你应该取消绑定事件。

function a(e) {  
    // unbind the event
    e = e || window.event;
    e = e.target || e.srcElement;
    e.onclick = null;
}