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模式,谢谢您的帮助!