Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 全局变量是顽固的_Javascript_Variables - Fatal编程技术网

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){}