回答

10

通行证在object,它是通按引用

var test = { 
    message: 'start' 
}; 
(function (t) {t.message = 'end'})(test); 
alert(test.message) 

FYI,Array也是通按引用

+1

这是鸡蛋里挑骨头,但对象和数组不传递按引用;对象的引用是按值传递的。这似乎是一种无意义的区别,实际上它是,但“通过引用传递”是指在编程语言设计中非常具体的东西。 – Pointy 2013-04-04 22:20:58

+0

谢谢,这正是我所需要的! (可以在11分钟内收到) – Doorknob 2013-04-04 22:21:15

+0

@积分同意。 – sweetamylase 2013-04-04 22:24:03

3

你不能在JavaScript中那么做(好吧,就是)。然而,您可以这样做:

var testBox = { test: "hello" }; 
(function(tb) { tb.test = "goodbye"; })(testBox); 
alert(testBox.test); // "goodbye" 

JavaScript只在函数调用中传递值;只有一种特殊的方法可以给变量(arguments对象和参数)一个别名,并且它很奇怪,没有兴趣。也就是说,对象属性(通常)是可变的,因此在需要修改值的函数的情况下,可以传递对象引用。

3

你不能这样做。

您可以做的最好做法是传入一个对象,然后更新该对象。

var test = { state: 'start' }; 
(function (t) {t.state = 'end'})(test); 
alert(test.state); // 'end' 
0

您只是将测试变量的值作为参数传递给该函数。更改参数值后,您需要将其分配回测试变量。

var test = 'start'; 
(function (t){t = 'end'; test = t;})(test); 
alert(test) //alerts 'test' 

或者

var myObject = {test: "start"}; 
var myFunc = function (theObject){ 
    theObject.test = 'end'; 
}(myObject); 
alert(myObject.test);