Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 从函数内部更改全局变量,或通过最佳实践实现相同的效果_Javascript_Jquery - Fatal编程技术网

Javascript 从函数内部更改全局变量,或通过最佳实践实现相同的效果

Javascript 从函数内部更改全局变量,或通过最佳实践实现相同的效果,javascript,jquery,Javascript,Jquery,我试图更改JQuery项目中名为projectCounter的变量,这样就不必为每个项目重复每个div中的按钮。如何使一个函数中的更改可供所有函数访问?这就是我到目前为止所做的: var projectCounter = 1; $('a').click(function() { function setValue() { var projectCounter = projectCounter + 1; alert(window.projectCounter); } })

我试图更改JQuery项目中名为
projectCounter
变量
,这样就不必为每个项目重复每个
div
中的按钮。如何使一个函数中的更改可供所有函数访问?这就是我到目前为止所做的:

var projectCounter = 1;

$('a').click(function() {
  function setValue() {
    var projectCounter = projectCounter + 1;
    alert(window.projectCounter);
  }
});

我还做了一个JSfiddle:

保留第一个
var
并删除函数中的一个

var projectCounter = 1;
$('a').click(function() {
  function setValue() {
    projectCounter = projectCounter + 1;
    alert(window.projectCounter);
  }
});
您的
setValue()
函数从未在您发布的代码中运行。它只会在单击之后定义(因此之前不可用),并且只有在单击之后才能调用/运行它。这就是你想要的吗?如果要在单击时添加
projectCounter
变量,请删除整个
函数setValue()
,只保留其内容

在本例中,运行
setValue()
projectCounter时,计数器将为2。
您也可以只使用
projectCounter++实现与
projectCounter=projectCounter+1相同的效果

即使在javascript运行后添加了div>a,以下代码也可以工作

这应该可以解决为什么代码不工作的问题。不过,我并不认为这是最佳实践

   var projectCounter = 1;

   function setValue() {
     projectCounter +=  1;
     alert(window.projectCounter);
   }   

   $('a').click(function(e) {
      e.preventDefault();
      setValue();
   });

我想这就是你想要实现的。现在您可以添加其他事件来调用
setValue()
。我必须说,您应该更具体地使用您所引用的
标记。

您的计数器在全局范围内,因此在任何地方都可见:

var projectCounter = 1;

$('a').click(function() {
  alert(projectCounter++);
});

您需要从set value函数中删除var。您还应该将此函数移到.click事件之外,以便在需要时可以在其他位置使用它。

当您在函数内部声明
var
时,您显式地给了它一个本地范围。如果在使用变量时不使用
var
,则该变量始终被视为全局变量。因此,在您的例子中,您在函数内部使用
var
,这为该函数提供了一个局部范围

最后,您实际上并没有在任何地方调用setValue()。所以这个函数实际上并没有执行。你是这个意思吗

var projectCounter = 1;

$('a').click(function() {
    projectCounter = projectCounter + 1;
    alert(window.projectCounter);
});

删除“var”,然后:
projectCounter++
您从未执行过setValue。单击事件按原样创建一个函数,然后放弃它而不执行。
alert(++projectCounter)是的,但是(部分)他的问题是他在本地范围内再次声明它。正确,这就是为什么我建议的代码段删除了这一行,因为同名的函数范围变量声明隐藏了全局范围变量声明。
   var projectCounter = 1;

   function setValue() {
     projectCounter +=  1;
     alert(window.projectCounter);
   }   

   $('a').click(function(e) {
      e.preventDefault();
      setValue();
   });
var projectCounter = 1;

$('a').click(function() {
  alert(projectCounter++);
});
var projectCounter = 1;

$('a').click(function() {
  function setValue() {
    projectCounter = projectCounter + 1;
    alert(window.projectCounter);
  }
});
var projectCounter = 1;

$('a').click(function() {
    projectCounter = projectCounter + 1;
    alert(window.projectCounter);
});