Javascript 全局变量是顽固的
为什么我的全局变量很顽固 以下是我的简化代码片段:Javascript 全局变量是顽固的,javascript,variables,Javascript,Variables,为什么我的全局变量很顽固 以下是我的简化代码片段: window.bVar = false; function iChange() { bVar = true; alert( bVar ); // 'true' } // some event calls iChange function window.onbeforeunload = alert( bVar ); // 'false' 警报始终显示“false”(除非我在函数
window.bVar = false;
function iChange() {
bVar = true;
alert( bVar ); // 'true'
}
// some event calls iChange function
window.onbeforeunload = alert( bVar ); // 'false'
警报始终显示“false”(除非我在函数中发出警报)
我还尝试使用var bVar=false
设置全局变量
为什么我的全局变量不会在函数范围之外更改?这太短了,不能作为答案,这就是为什么我在注释中写了它,但是您立即评估
警报(bVar)
,而不是作为onbeforeunload侦听器的一部分进行评估。你需要这样的东西:
window.onbeforeunload = function() { alert(bVar); };
为了不那么简洁和更具体,我想调用另一个函数,不需要发出警报。另一个函数将执行.load操作,并将值写入数据库。那么这应该起作用吗;因为它不会传递全局变量的更新值:(例如
var bVar = "value";
window.onbeforeunload = function() { dosomethingelse( bVar ); }
function dosomethingelse( bVar ) { $("#id").val( bVar ); }
“尝试使用
var bVar=false
设置全局变量”,这将显式地不设置全局变量。这将创建一个局部变量并将其设置为false
,与同名全局变量的状态完全无关。您的意思是window.onbeforeunload=function(){alert(bVar);}
?我喜欢无生命变量可能“顽固”的概念。这是一个非常人性化的概念,恐怕你很顽固:)是的,我是顽固的一个,因为它不会做我想让它做的事-grrrr!但是,正如前面所讨论的,大多数浏览器都会将此警报作为安全功能进行阻止。您可能应该执行类似于window.onbeforeunload=function(){return bVar;}
Yes的操作,“window.onbeforeunload=alert(bVar);”行立即将onbeforeunload的值设置为“alert()”返回的未定义值。正如astex所说,onbeforeunload需要设置为一个函数。为了不那么简洁和更具体,我想调用另一个函数,而不需要发出警报。另一个函数将执行.load操作,并将值写入数据库。那么这应该起作用吗;原因它不传递全局变量的更新值:(window.onbeforeunload=function(){dosomethingelse(bVar);}function dosomethingelse(bVar){}