Javascript jS:单击函数将数字添加到变量-给出NaN
我的问题很简单,我无法使用click事件在javascript中添加全局变量。它返回一个Javascript jS:单击函数将数字添加到变量-给出NaN,javascript,jquery,Javascript,Jquery,我的问题很简单,我无法使用click事件在javascript中添加全局变量。它返回一个NaN结果 var xx = 50; $('div').click(function(){ var xx = xx + 10; alert(xx) }); 您可以跳过函数的内部。然后将使用全局变量xx $('div').click(function() { xx = xx + 10; //^ without var alert(xx); }); 因为您两次声明相同的变量(x
NaN
结果
var xx = 50;
$('div').click(function(){
var xx = xx + 10;
alert(xx)
});
您可以跳过函数的内部。然后将使用全局变量xx
$('div').click(function() {
xx = xx + 10;
//^ without var
alert(xx);
});
因为您两次声明相同的变量(
xx
)
参见小提琴:
那么,它为什么会回来呢
因为在这行var xx=xx+10代码>变量xx
再次定义,但未使用任何值加上10进行初始化
因此var xx
将保持undefined
,在undefined上加10将不会返回一个数字(NaN)
window.xx=50;
$('div')。单击(函数(){
window.xx=window.xx+10;
警报(window.xx)
});代码>
单击
读取变量“范围”:
全局作用域在函数外部,因此在函数外部声明“xx”意味着代码中的任何内容都可以看到它。局部作用域在函数中,因此在函数中声明“xx”意味着函数中的任何内容都可以看到它。但是,由于您已将其声明为全局和局部,因此在函数内部,局部变量将覆盖全局变量。您有两个同名变量。一个是全球的,另一个是本地的。没有为局部变量赋值。您是否试图将其中xx=50添加到局部变量?然后您可以替换行var xx=xx+10;至xx+=10;
这会奏效的 在您的代码中,因为您使用相同的名称在全局范围和函数范围中定义变量,所以会出现问题。在该代码中,在功能级别-var xx=xx+10
您尝试使用var
重新定义xx变量,但忘记重新初始化它,因此对于未初始化的变量,默认情况下它将是未定义的
,并且您向其中添加10,其中未定义的+10
将不是一个数值(NAN)
有两种方法,
最好的方法是使用ES6版本的Javascript,它添加了两个特性let
和const
消除var
。
const
是不可变的,即使在初始化后尝试对其进行变异,也会给出错误。
let
仅在定义的范围内有效,例如,如果在循环中定义let变量,则它属于该循环,只有外部人员无法访问它。在代码下面,我将50
值初始化更改为const
,并且在添加过程中使用了let
const xx=50;
$('div')。单击(函数(){
设yy=xx+10;
警报(yy)
});代码>
点击
这称为。