Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 jS:单击函数将数字添加到变量-给出NaN_Javascript_Jquery - Fatal编程技术网

Javascript jS:单击函数将数字添加到变量-给出NaN

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

我的问题很简单,我无法使用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);
});

因为您两次声明相同的变量(
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)
    });
    
    
    点击
    
    这称为。