Javascript函数,它接受可变数量的参数 - 更改它们的值 - 然后返回它们

TiL*_*gic 2 javascript arguments function

我是Javascript的新手(以及一般的编程),并且一直在寻找一种使用Javascript函数更改任意数量的aguments值的方法.

这里的答案(函数的JavaScript变量数量)非常有用.我能够用它来创建我需要的两个功能,但是我遇到了第三个功能.

基本上我想将一个可变数量的对象(原始的或更复杂的)传递给一个函数,并让函数改变每个对象的值.

var pants = true;
var house = true;
var hair = {/* lots of stuff */};

var onFire = function() {
        for (var i = 0; i < arguments.length; i++) {
            arguments[i] = false;
        }
};

onFire(pants, house, hair);
Run Code Online (Sandbox Code Playgroud)

控制台输出:

>pants;
 true

>house;
 true

>hair;
 Object
Run Code Online (Sandbox Code Playgroud)

我如何制定这个函数,结果如下:

>pants;
 false

>house;
 false

>hair;
 false
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

编辑:

澄清事情 - 我正在尝试创建一个可重用的辅助函数,它可以更改传入的任何对象的值,false而不是键入:

var a1 = false;
var a2 = false;
...
var a+n = false;
Run Code Online (Sandbox Code Playgroud)

如果我使用mathec的方法 - 是否可以'解析' object以便它的属性覆盖同名的全局变量,或者我每次都明确地输入它?

var object = {
    pants: {/* lots of stuff */},
    house: {/* lots of stuff */},
    hair: {/* lots of stuff */}
};

function modifyObject(obj) {
    obj.pants = false;
    obj.house = false;
    obj.hair = false;
}

function someMagic(object){
    // wand waves...
    // rabbit exits hat....
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

>pants;
 false

>house;
 false

>hair;
 false 
Run Code Online (Sandbox Code Playgroud)

cma*_*her 5

当您在JavaScript中传递变量时,如果它是一个对象,则将引用的副本传递给值,但如果它是一个基元(如真/假),则复制实际值.这基本上意味着,如果您传入一个对象并修改其中一个对象的属性,您将修改原始对象.但是如果你传入一个像true/false这样的原语,你只需修改副本,而不是原始值.因此,如果您的目标是修改原始值,则可以选择将这些值存储在对象中并传入对象.例如:

var object = {
    pants: true,
    house: true,
    hair: {}
};

function modifyObject(obj) {
    obj.pants = true;
    obj.house = true;
    obj.hair = true;
}
Run Code Online (Sandbox Code Playgroud)

如果你想修改任意数量的参数,请记住,如果你传入的是true/false,你就是要复制这些值.因此,如果您在函数内部更改它们,则不会修改原始值.

记住这一点的一种快速方法是,如果您传递了一个对象或一个数组,那么您正在修改实际对象.还有别的,你正在修改副本.

编辑

因此,从字面上解释你想做什么,你可以这样写:

var a = true,
    b = true;

/* pass in variable names */
function makeFalse() {
   var i, len;

   for (i = 0, len = arguments.length; i < len; ++i) {
     window[arguments[i]] = false;
   }
 }

 makeFalse("a", "b");
Run Code Online (Sandbox Code Playgroud)

但我想不出有这么好的理由:-).我会使用配置对象来存储标志和状态变量,而不是全局变量.