如何创建一个递增全局值的函数?

时间:2017-12-05 17:39:33

标签: javascript function

我目前正在尝试对我赋予零值的变量执行一些简单的操作。首先,我声明一个变量并给它一个值(0)。其次,我正在创建一个函数,该函数在调用函数时应该增加变量的值。这是我的代码:

var orderCount = 0;

function takeOrder(orderCount) {
return orderCount++;
}

takeOrder(orderCount);
takeOrder(orderCount);

alert(orderCount);

上面代码片段的检测结果为“2”,因为该函数被调用两次,因此数字0应该递增两次。

我还尝试使用以下代码而不是上面发布的代码递增变量“orderCount”:

function takeOrder(orderCount) {
return orderCount + 1;
}

两者都不起作用。我究竟做错了什么?

3 个答案:

答案 0 :(得分:2)

从参数列表中删除orderCount,并且在调用函数时不要将其作为参数包含在内。通过将其指定为参数,您可以遮蔽(隐藏)takeOrder关闭的全局变量。



var orderCount = 0;

function takeOrder() {
//                 ^----- don't include `orderCount` as a parameter
    return orderCount++;
}

takeOrder(); // <== don't specify it when calling the
takeOrder(); // <== function (though it would just be ignored)

alert(orderCount);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

一些事实:

  1. 该函数的参数就像一个函数范围的变量。您 可以重新分配它,增加它等。一旦函数完成执行,所有这些变化都会消失。

  2. 名称与&#34; global&#34;相同的局部变量隐藏后者 在函数体内,因此使所有功能上的变化与外界隔离。

  3. 更改参数名也无济于事,因为全局变量的值将放在函数调用堆栈中。实际上,传递任何变量都没有用。

    典型的解决方案是根本不使用参数,直接在外部范围内使函数更改变量。

    然而,可以模仿传递&#34;参考&#34;变量。如果你真的希望你的函数不知道全局变量名:

    &#13;
    &#13;
    var order = { count: 0 };
    var anotherOrder = { count: 0 };
        
    function takeOrder(order) {
        order.count++;
    }
    
    takeOrder(order); 
    takeOrder(order); 
    takeOrder(anotherOrder);
    
    console.log("Order:"+order.count);
    console.log("Another order:"+anotherOrder.count);
    &#13;
    &#13;
    &#13;

答案 2 :(得分:0)

只需调用函数而不传递参数

&#13;
&#13;
var orderCount = 0;

function takeOrder() {
  return orderCount++;
}

takeOrder();
takeOrder();

alert(orderCount);
&#13;
&#13;
&#13;