我正在比较Current Sub和New Sub。它从php文件中获取CurrentSub
并等待4秒,然后从同一文件中获取NewSub
。
当我运行此代码时,它会弹出警报,因为它是相同的,并且它的警报是不同的。
我不明白它是如何相同但又不同?我打印放在屏幕上的变量,它们是相同的。
任何帮助将不胜感激。
setInterval(function() {
var CurrentSub = "<?php echo $Name[1] ; ?>";
setTimeout(function() {
var NewSub = "<?php echo $Name[1] ; ?>";
if (NewSub != CurrentSub) {
window.alert("different");
setTimeout(function() {
$('.subText').html(NewSub);
}, 200)
document.getElementById("Sub1Move").style.display = "block";
document.getElementById("Sub1").style.display = "none";
$("#Sub1Move").animate({
marginTop: "-=34px",
}, 1900, function() {
document.getElementById("Sub1").style.display = "block";
});
setTimeout(function() {
$("#Sub1Move").stop();
document.getElementById("Sub1").style.display = "block";
document.getElementById("Sub1Move").style.display = "none";
document.getElementById("Sub1Move").style.marginTop = "34px";
}, 2000);
var CurrentSub = "<?php echo $Name[1] ; ?>";
};
if (NewSub == CurrentSub) {
window.alert("same");
};
}, 4000);
$('.test').html(NewSub);
$('.test1').html(CurrentSub);
}, 500);
setTimeout(function() {
$('.subText').html(CurrentSub);
}, 200);
答案 0 :(得分:0)
第一个语句在执行之前执行:
if (NewSub != CurrentSub) {
以便显示不同的警报。 然后在最后有:
var CurrentSub = "<?php echo $Name[1] ; ?>";
所以现在CurrentSub
和NewSub是相同的,所以正确的if语句评估为true:
if (NewSub == CurrentSub) {
答案 1 :(得分:0)
您的setInterval
和setTimeout
正在创造竞争条件。您在每个setTimeout
调用时创建的新setInterval
为4秒。最后,在执行第一个setTimeouts
之前,有8个新setInterval
被调用。这是每个setTimeout
花费500毫秒而嵌套setInterval
花费4秒的结果。基本上,这段代码闻起来是因为你必须在它们已经改变时继续比较。在最后一个完成之前,尽量不要执行新的setInterval
。因此,要么延长setTimeout
超时,要么缩短嵌套 <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="rbtn_generate">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="GV_Shift_employees" />
</UpdatedControls>
</telerik:AjaxSetting>
</telerik:RadAjaxManager>
。
答案 2 :(得分:0)
问题是闭包中引用的变量。 和悬挂声明 你的代码就是这样的东西。
function scope1(){
var CurrentSub // local 1
function scope2()
{
var NewSub // local 2
if(NewSub comparison CurrentSub)//you think you are referring to "local 1" but since you are redeclaring it on this function you are actually referring to "local 3"
{
CurrentSub IS undefined at this point
}
var CurrentSub // local 3 .. redeclaration of a var in local scope, is created as undefined in the beginning of the scope, only to be defined at this point
}
}
最简单的解决方案是从第二个var
中删除var CurrentSub
以允许函数引用外部变量,而不是为内部范围创建新的。