我目前正在尝试对我赋予零值的变量执行一些简单的操作。首先,我声明一个变量并给它一个值(0)。其次,我正在创建一个函数,该函数在调用函数时应该增加变量的值。这是我的代码:
var orderCount = 0;
function takeOrder(orderCount) {
return orderCount++;
}
takeOrder(orderCount);
takeOrder(orderCount);
alert(orderCount);
上面代码片段的检测结果为“2”,因为该函数被调用两次,因此数字0应该递增两次。
我还尝试使用以下代码而不是上面发布的代码递增变量“orderCount”:
function takeOrder(orderCount) {
return orderCount + 1;
}
两者都不起作用。我究竟做错了什么?
答案 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;
答案 1 :(得分:1)
一些事实:
该函数的参数就像一个函数范围的变量。您 可以重新分配它,增加它等。一旦函数完成执行,所有这些变化都会消失。
名称与&#34; global&#34;相同的局部变量隐藏后者 在函数体内,因此使所有功能上的变化与外界隔离。
更改参数名也无济于事,因为全局变量的值将放在函数调用堆栈中。实际上,传递任何变量都没有用。
典型的解决方案是根本不使用参数,直接在外部范围内使函数更改变量。
然而,可以模仿传递&#34;参考&#34;变量。如果你真的希望你的函数不知道全局变量名:
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;
答案 2 :(得分:0)
只需调用函数而不传递参数
var orderCount = 0;
function takeOrder() {
return orderCount++;
}
takeOrder();
takeOrder();
alert(orderCount);
&#13;