Javascript jQuery-为什么给全局变量赋值不';在函数内部不工作?

Javascript jQuery-为什么给全局变量赋值不';在函数内部不工作?,javascript,jquery,Javascript,Jquery,我正在构建一个带有两个按钮的滑块,以使数字更高/更低。这是 这项工作: var update_num; $('.plus').on('click', function() { update_num = $('output').text()*1; if (update_num < 100) { $('output').text(update_num + 1); } else {

我正在构建一个带有两个按钮的滑块,以使数字更高/更低。这是

这项工作:

    var update_num;
    $('.plus').on('click', function() {
         update_num = $('output').text()*1;    
       if (update_num < 100) {
            $('output').text(update_num + 1);
        } else {
            $('output').text(100);
        }
        });

    $('.minus').on('click', function() {
        update_num = $('output').text()*1;          
        if (update_num > 0) {
            $('output').text(update_num - 1);
        } else {
            $('output').text(0);
        }
    }); 
var更新\u num;
$('.plus')。在('click',function()上{
update_num=$('output').text()*1;
如果(更新数量<100){
$('output').text(更新数量+1);
}否则{
$(‘输出’).text(100);
}
});
$('.减号')。在('click',function()上{
update_num=$('output').text()*1;
如果(更新数量>0){
$('output').text(update_num-1);
}否则{
$('output')。文本(0);
}
}); 
但这不起作用:

    var update_num = $('output').text()*1;
    $('.plus').on('click', function() {
         if (update_num < 100) {
            $('output').text(update_num + 1);
        } else {
            $('output').text(100);
        }
        });

    $('.minus').on('click', function() {
        if (update_num > 0) {
            $('output').text(update_num - 1);
        } else {
            $('output').text(0);
        }
    }); 
var update_num=$('output').text()*1;
$('.plus')。在('click',function()上{
如果(更新数量<100){
$('output').text(更新数量+1);
}否则{
$(‘输出’).text(100);
}
});
$('.减号')。在('click',function()上{
如果(更新数量>0){
$('output').text(update_num-1);
}否则{
$('output')。文本(0);
}
}); 

为什么会这样,因为var update_num是全局的,所有其他函数都应该能够读取它?什么是使代码变干的最佳方法?

这里的问题是update_num的值在第二个代码段中只设置了一次。例如,如果它是2。然后,每次单击减号按钮时,值为(2-1),单击加号按钮时,值为(2+1)。update_num的值应随每次按钮单击而更改

你的问题是为什么给全局变量赋值不起作用。但在第二个代码中,在单击按钮时从未完成分配。 试试这个:

var update_num = $('output').text()*1;
$('.plus').on('click', function() {
     if (update_num < 100) {
        $('output').text(++update_num);
    } else {
        $('output').text(100);
    }
    });

$('.minus').on('click', function() {
    if (update_num > 0) {
        $('output').text(--update_num);
    } else {
        $('output').text(0);
    }
});
var update_num=$('output').text()*1;
$('.plus')。在('click',function()上{
如果(更新数量<100){
$('output').text(++update_num);
}否则{
$(‘输出’).text(100);
}
});
$('.减号')。在('click',function()上{
如果(更新数量>0){
$('output').text(--update_num);
}否则{
$('output')。文本(0);
}
});

记住一件事,全局变量是危险的。 假设您最初将\u num更新为34。因此,在('click',function()上,值变为35。但是如果再次单击,更新数值将不会更改,因为它仅在
var update_num=$('output').text()处设置了一次;
没有双向绑定,这意味着如果更改
$('output').text()*1、 
update\u num的值也将更改
您可以搜索google,了解有关
双向绑定
可观察Javascript模式

的更多信息。当运行全局变量update_num时,does$('output')存在?如果存在,则在您的回调中永远不会更新update_num。就是这样!我想知道为什么它只更新一次并停止,++/-是答案。非常感谢您的澄清!如果答案对您有所帮助,请将其标记为正确。谢谢!是的,我完全知道应该避免使用全局变量以保持全局空间干净。我的主要关注点是找出全局变量,然后将整个部分封装到函数中(我这样做了,JSFIDLE也相应地更新了)。我将更深入地查找双向绑定/js模式,谢谢您的帮助!