【问题标题】:Modify arguments in self executing function修改自执行函数中的参数
【发布时间】:2013-03-27 04:58:36
【问题描述】:

我希望能够修改传递给自执行函数的参数。

这里是一些示例代码:

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

还有here is a fiddle。变量test 没有改变。我怎样才能改变它,就像通过引用一样?

【问题讨论】:

    标签: javascript pass-by-reference anonymous-function self-executing-function


    【解决方案1】:

    传入一个object,它是pass-by-reference

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

    仅供参考,Array 也是传递引用

    【讨论】:

    • 它是分裂的头发,但对象和数组不是通过引用传递;对对象的引用是按值传递的。这似乎是一个毫无意义的区别,实际上确实如此,但“通过引用传递”意味着编程语言设计中非常具体的东西。
    • 谢谢,这正是我需要的! (可以在 11 分钟内接受)
    【解决方案2】:

    你不能在 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'
      

      【讨论】:

        【解决方案4】:

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

        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);
        

        【讨论】:

          猜你喜欢
          • 2017-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-23
          相关资源
          最近更新 更多