功能“记住”价值问题

时间:2009-09-07 20:32:41

标签: javascript jquery

这是我的代码的简化部分版本,用于演示此问题:

function testFunc(){
    var randomNum = Math.floor( Math.random() * 100 );

  if( !flag ){
      addEvents();
        flag = true;
  };

    function checkNumber(){
       alert(randomNum)
    }

  function addEvents(){
        $("#someElement").click(function(e){ checkNumber() });
  }
}

我想仅为此元素绑定click事件ONCE,但使用从其他位置更改的外部变量。事实上,这总是警告randomNum的初始值 当绑定第一次发生时!

为什么不是每次触发点击都“读取”变量?

4 个答案:

答案 0 :(得分:4)

真的是全球性的吗?尝试提醒window.randomNum

答案 1 :(得分:0)

您正在为全局变量设置值。然后你警告按钮点击的价值。 值只设置了一次,每按一次按钮就不会改变。

答案 2 :(得分:0)

这可能与函数insude函数有关。当你这样做时:

function checkNumber() {
    alert(randomNumber);
}

我认为和做的一样:

myFunc = function checkNumber() {
    alert(randomNumber);
}

因此设置好,randomNumber就好final。如果你需要使用randomNumber,你应该将它移动到该范围并使其成为全局,或者更好,将它作为参数传递给函数:

function checkNumber(myNumber) {
    alert(myNumber);
}

答案 3 :(得分:0)

为什么不将randomNumber添加到要添加clickevent的元素的自定义属性中?

function testFunc(){
    var randomNum = Math.floor( Math.random() * 100 );
    $("#someElement").attr("randomNum", randomNum);

    if( !flag ){
        addEvents();
        flag = true;
    };

    function checkNumber(){
        alert($("#someElement").attr("randomNum"))
    }

    function addEvents(){
        $("#someElement").click(function(e){ checkNumber() });
    }
}

这样它始终与元素保持一致,但可以从整个地方调用。相当混乱,但应该有效。