javascriptvariables引用/别名

是否有可能在JavaScript中分配一个别名/引用本地变种?

我的意思是类似C的东西:

function foo() { var x = 1; var y = &x; y++; alert(x); // prints 2 } 

= EDIT =

在这个代码中是否可以使用arguments.callee?

 function foo() { arguments.callee.myStaticVar = arguments.callee.myStaticVar || 0; arguments.callee.myStaticVar++; return arguments.callee.myStaticVar; } 

在JavaScript中,基本types(如整数和string)按值传递,而对象按引用传递。 所以为了达到这个目的,你需要使用一个对象:

 // declare an object with property x var obj = { x: 1 }; var aliasToObj = obj; aliasToObj.x ++; alert( obj.x ); // displays 2 

在某种程度上这是可能的,你可以使用闭包创build一个variables的别名:

 Function.prototype.toString = function() { return this(); } var x = 1; var y = function() { return x } x++; alert(y); // prints 2, no need for () because of toString redefinition 

是否可以别名取决于数据types。 对象,数组和函数将通过引用进行处理,而且可以使用别名。 其他types基本上是primefaces的,variables存储的值,而不是一个值的引用。

arguments.callee是一个函数,因此可以引用它并修改该共享对象。

 function foo() { var self = arguments.callee; self.myStaticVar = self.myStaticVar || 0; self.myStaticVar++; return self.myStaticVar; } 

请注意,如果在上面的代码中你要说self = function() {return 42;}; 那么self会引用与arguments.callee 不同的对象 ,它仍然是对foo的引用。 当你有一个复合对象时,赋值操作符replace了引用,它不会改变被引用的对象。 对于primefaces值,像y++这样的情况相当于y = y + 1 ,它将一个“新”整数赋值给variables。

编辑到我以前的答案:如果你想计算一个函数的调用,你可能想尝试:

 var countMe = ( function() { var c = 0; return function() { c++; return c; } })(); alert(countMe()); // Alerts "1" alert(countMe()); // Alerts "2" 

这里,c用作计数器,并且不必使用arguments.callee。

在user187291的文章上展开,你也可以使用getters / setter来绕过不得不使用的function。

 var x = 1; var ref = { get x() { return x; }, set x(v) { x = v; } }; (ref.x)++; console.log(x); // prints '2' x--; console.log(ref.x); // prints '1' 

我今天search了我的项目,发现这看起来是最好的办法: http : //sirdarckcat.blogspot.com/2007/07/passing-reference-to-javascript.html