这是我的代码的简化部分版本,用于演示此问题:
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的初始值 当绑定第一次发生时!
为什么不是每次触发点击都“读取”变量?
答案 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() });
}
}
这样它始终与元素保持一致,但可以从整个地方调用。相当混乱,但应该有效。