Javascript取代c++.——当用作函数调用的参数时,函数调用更新变量并返回它
Javascript replace ++.-- when used as a parameter with a function call that both updates the variable and returns it
在下面的示例中,j++既充当变量又充当函数
var j = 0;
var arr = [];
arr[j++] = "a1";
arr[j++] = "a2";
console.log(arr[0]);
console.log(arr[1]);
是否有一种不使用++的方法来写它,如:
function addx(i)
{
return i+1;
}
var j=0;
arr[addx(j)] = "a1";
arr[addx(j)] = "a2";
的问题是,我只能改变括号[]之间的空格。我不允许在函数上面声明j变量并在里面更新它,所以这个解决方案是不可接受的。
var j=0;
function addx(i)
{
j = i+1;
return j-1;
}
arr[addx(j)] = "a1";
arr[addx(j)] = "a2";
在Pascal中,您可以像function addx(var i:integer) : integer;
一样声明函数,在这种情况下,参数将是变量,因此在函数中包含i := i+1;
也将更新调用变量。
这是参考的地方。
像风箱
function addx(i)
{
return i.val++;
}
var j={val:0};
arr[addx(j)] = "a1";
arr[addx(j)] = "a2";
根据约束条件,我认为这是某种家庭作业问题?否则,它似乎完全是一种人为的约束。
一个解决方案是使用闭包来维护变量状态,以支持后增量函数:
function NumberWrapper() {
var value; // initially undefined
return {
assign: function(n) {
return value = n;
},
postincrement: function() {
var result = ++value;
...
return result; // to emulate post-increment semantics
}
};
};
var i = new NumberWrapper();
var arr = [];
arr[i.next()] = "a1";
arr[i.next()] = "a2";
NumberWrapper
对象保持自己的状态,它暴露的唯一功能是增加自己并返回该值(一步)。
EDIT好,有趣的用例,嗯-可以扩展上面的包装器,为其他数字操作提供一个干净的实现:
return {
postincrement: ...
preincrement: function() { return ++value; }
plusequals: function(n) { value += n; return value; }
minusequals: function(n) { value -= n; return value; }
etc...
};
你可以这样做:
var oldj;
var j = 0;
var arr = [];
arr[oldj = j, j = addx(j), oldj] = "a1";
arr[oldj = j, j = addx(j), oldj] = "a2";
使用很少使用的逗号操作符将一系列表达式组合成单个表达式。我们保存j
的旧值,用addx
的结果更新j
,然后使用旧值作为数组中要赋值的索引。
不幸的是,Javascript没有宏,所以没有办法缩短冗长的代码。
可以使用push方法向数组中添加后续元素:
arr.push("a1");
arr.push("a2");
这使得不需要j
,并且还避免了数组索引中的空白。
相关文章:
- 自定义绑定到可观察数组,不调用更新函数
- 通过调用函数自动更新站点
- 如果我有一个变量,分配给函数调用的值,如果函数调用的参数更改,是否可以更新该变量
- 补间.js不调用更新函数
- 函数调用后,角度示波器未在屏幕上实时更新
- AngularJS:$http请求问题-没有为jQuery函数调用更新DOM
- 在JavaScript中的一个函数调用期间进行多次更新
- 如何使用onclick函数调用mysql更新查询
- 通过对Flask的函数调用更新值
- 相位:调用更新函数不工作
- Javascript取代c++.——当用作函数调用的参数时,函数调用更新变量并返回它
- 如何迭代javascript数组并调用更新相同数组的函数?
- 调用函数不更新数据
- 无法在函数内部更新全局变量并在函数外部调用它(jQuery)
- 函数调用后未更新Javascript成员
- 如何使用codeigniter在ajax中调用函数来更新
- 回调函数内部的值在每次函数调用时都没有更新
- 无法更新Object'中的Javascript Object属性;s函数调用
- 调用函数来更新某些变量
- 如何在 ng-submit 调用工厂函数后更新视图