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

时间:2013-07-17 15:14:38

标签: javascript jquery

我正在尝试更改JQuery项目中名为variable的{​​{1}},这样我就不必为每个项目在每个projectCounter内重复按钮。如何在所有功能都可以访问的功能中进行更改?这就是我到目前为止所做的:

div

我也做了一个JSfiddle:http://jsfiddle.net/cPFRD/

7 个答案:

答案 0 :(得分:0)

保留第一个var并删除函数内的一个<{p}

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

您的setValue()函数永远不会在您发布的代码中运行。它只会在点击后定义(因此之前不可用),并且只有在点击之后才能调用/运行它。那是你要的吗?如果您希望在点击时添加projectCounter变量,请移除整个function setValue(),只留下其内容。

当您运行setValue()时,projectCounter将为2,在此示例中。 您也可以仅使用projectCounter++;来实现projectCounter = projectCounter + 1;

答案 1 :(得分:0)

即使在运行javascript后添加了div&gt; a,以下代码也能正常运行。

> Example Fiddle <

的JavaScript

var counter = 0;

$('.container').on('click', 'div a', function () {
  counter++;
  alert(counter);
});

HTML

<div class="container">
  <div>
    <a>Increase Counter</a>
  </div>
</div>

答案 2 :(得分:0)

var projectCounter = 1;

$('a').click(function() {
  setValue();//this actually calls the function and thus makes it happen
});

//defining/declaring a function, doesn't actually do anything until it is called
 function setValue() {
    projectCounter = projectCounter + 1;//no var keyword because we want to reference the existing variable, not declare a new one
    alert(window.projectCounter);
  }

这应解决您的代码无法正常工作的问题。我并未声称这是最佳做法。

答案 3 :(得分:0)

   var projectCounter = 1;

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

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

我认为这是你想要完成的事情。现在您可以添加其他事件来呼叫setValue()。我必须说你应该更具体地说明你所引用的a标签。

答案 4 :(得分:0)

您的计数器属于全球范围,因此无处不在:

var projectCounter = 1;

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

答案 5 :(得分:0)

var projectCounter = 1;

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

您需要从设定值功能中删除var。您还应该在.click事件之外移动此功能,以便在需要时可以在其他位置使用它。

答案 6 :(得分:0)

在函数内声明var时,您明确地给它一个局部范围。如果在使用变量时不使用var,则始终将其视为全局变量。因此,在您的情况下,您在函数内部使用var,这为该函数提供了本地范围。

最后,你实际上并没有在任何地方调用setValue()。所以该功能实际上并没有执行。你的意思是这个吗?

var projectCounter = 1;

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