JavaScript,通过函数访问全局变量

时间:2016-01-19 18:07:15

标签: javascript jquery variables

在我指定我正在努力解决的问题之前,让我向您展示我的JavaScript代码。

var gVar = 0;

$("#plus").click(function(e) {
    e.preventDefault();
    gVar = gVar + 1;
    alert(gVar);
});

$("#minus").click(function(e) {
    e.preventDefault();
    gVar = gVar + 1;
    alert(gVar);
});

在上面的代码中,我首先设置一个全局变量'gVar',它保存一个整数值为零。每当我点击ID为“plus”的按钮时,全局变量'gVar'的值将增加1,将在浏览器的对话框中打印出来。

对于ID为“减号”的按钮,同样的事情会发生,除了'gVar'的值将减1。

在我尝试整理上面的代码时,我单独创建了一个函数,每当我单击这两个按钮时都会调用它。这是代码。

var gVar = 0;

var weird = function (button, Var, num1) {
    $(button).click(function(e){
        e.preventDefault();
        Var = Var + num1;
        alert(Var);
    });
};

weird("#plus", gVar, 1);
weird("#minus", gVar, -1);

当我运行此代码时,'gVar'的值永远不会改变,并始终保持为'0'。

我想我隐约知道这里的问题是什么,但不完全确定导致这个问题的原因。我将非常感谢任何意见,以便为我澄清这个问题。

另外,我很好奇是否有任何方法可以创建一个函数来实现相同的效果,而不是为两个不同的点击事件编写两次类似的代码集。

3 个答案:

答案 0 :(得分:3)

在JavaScript中,只有对象作为引用传递,当您将对象分配给另一个变量时,所有其他类型(包括数字)都会被复制。

您可以将变量名称作为字符串传递,然后将其称为window[Var]

var gVar = 0;

var weird = function (button, Var, num1) {
    $(button).click(function(e){
        e.preventDefault();
        window[Var] = window[Var] + num1;
        alert(window[Var]);
    });
};

weird("#plus", "gVar", 1);
weird("#minus", "gVar", -1);

正如@ shiplu.mokadd.im建议的那样,您也可以将gVar更改为对象:

var gVar = {value: 0};

var weird = function (button, Var, num1) {
    $(button).click(function(e){
        e.preventDefault();
        Var.value = Var.value + num1;
        alert(Var.value);
    });
};

weird("#plus", gVar, 1);
weird("#minus", gVar, -1);

答案 1 :(得分:1)

无论函数是什么,您都不能重新分配参数并期望范围反映该变化。但是,根据参数,您可以修改它(即gVar是对象还是数组)。我建议你阅读有关通过引用/值传递的内容,以便更好地理解这意味着什么here

全局变量的本质是它对整个程序是全局的,因此 - 不需要作为参数传递给任何函数。

所以不要修改太多的原始代码

var gVar = 0;

var weird = function (button, num1) {
    $(button).click(function(e){
        e.preventDefault();
        gVar += num1;
        alert(Var);
    });
};

weird("#plus", 1);
weird("#minus", -1);

答案 2 :(得分:0)

var gVar = {
  value: 0
};

var weird = function(button, Var, num1) {
  $(button).click(function(e) {
    e.preventDefault();
    Var.value = Var.value + num1;
    alert(Var.value);
  });
};

weird("#plus", gVar, 1);
weird("#minus", gVar, -1);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" value="+" id="plus">
<br>
<input type="button" value="-" id="minus">