Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 改变功能参数_Javascript_Node.js_Google Apps Script - Fatal编程技术网

Javascript 改变功能参数

Javascript 改变功能参数,javascript,node.js,google-apps-script,Javascript,Node.js,Google Apps Script,希望检查传递给函数的参数,并替换未指定的参数或“我不喜欢”的参数。为此,我做了以下工作(我之所以要使用参数是因为我想让一个通用函数来做这件事)(与node.js的结果相同,只需将Logger更改为console): 因此调用callArgTest的结果是: Logger.log([at begin x=undefined, y=undefined, z=undefined, []]) Logger.log([arguments now:, []]) Logger.log([arguments[0

希望检查传递给函数的参数,并替换未指定的参数或“我不喜欢”的参数。为此,我做了以下工作(我之所以要使用
参数
是因为我想让一个通用函数来做这件事)(与node.js的结果相同,只需将Logger更改为console):

因此调用
callArgTest
的结果是:

Logger.log([at begin x=undefined, y=undefined, z=undefined, []])
Logger.log([arguments now:, []])
Logger.log([arguments[0]=a, []])
Logger.log([arguments[1]=b, []])
Logger.log([arguments[2]=c, []])
Logger.log([at end x=undefined, y=undefined, z=undefined, []])
Logger.log([at begin x=1, y=2, z=3, []])
Logger.log([arguments now:, []])
Logger.log([arguments[0]=a, []])
Logger.log([arguments[1]=b, []])
Logger.log([arguments[2]=c, []])
Logger.log([at end x=a, y=b, z=c, []])
因此,参数x、y、z仅在最初指定时更改。在第一种情况下(不带参数调用
argtest
),即使将值赋给参数,它们仍然未定义。那么,为了让它发挥作用,这里缺少了什么?注意,我不想触摸x,y,z。相反,在最终的实现中,我希望将参数传递给一个对其起作用的函数。

之后

arguments[0]="a";
arguments[1]="b";
arguments[2]="c";
你为什么不加上

x = arguments[0];
y = arguments[1];
z = arguments[2];
??
我想这不符合你的目标是有原因的,但我想我需要一个更现实的例子来看看什么才真正符合你的目标。

也许你可以这样做:

var args = Array.prototype.slice.call(arguments);

然后使用
args
?如果需要,可以将
args
传递到其他函数中。请告诉我这是否有助于您,或者我是否找错了方向。

问题是,在调用
argtest()
时,
参数实际上没有
“0”
属性来引用
x
,或者
“1”
来引用
y
,等等:

argtest()      => arguments = { "length": 0 }
argtest(1,2,3) => arguments = { "length": 3, "0": x, "1": y, "2": z }
该引用的定义在的步骤
11.c
中描述,该步骤为
参数的每个“索引”定义了getter和setter,但受命名参数的数量和传递参数的数量的限制

关于你的意图:

我想在函数开头的现有实现中加入一个对函数的调用,该函数只将参数和一些默认值作为参数,例如
defaults(参数,“string=nana”,“number=4”)

您可能会发现这样的事情更容易:

function argTest(x, y, z) {
    x = typeof x !== 'undefined' ? x : ...;
    y = typeof y !== 'undefined' ? y : ...;
    // etc.
}

你想做的事情是用ES5来做的,但这意味着为每个“索引”和命名参数定义你自己的“参数”对象,无论传递的值与否,通过/或/或,我都不认为这是“简单的”:


当前,您正在成功更改
参数[n]
,但它不会影响
x
y
z
。为什么不使用
参数[n]
符号来引用
x
y
z
?这是什么浏览器?即使在调用函数时没有参数,我也能够为参数赋值。这是在Chrome中。@LarsH-Hmm.x、y和z如果在调用函数(第二次调用argtest)时被指定,只需更改参数[0..2],就会受到影响,所以即使没有指定它们(调用
atest()
)@Vivin这是谷歌应用程序脚本,使用javascript作为语言,但是它不是一个浏览器环境(没有窗口,没有文档)@Vivin是的,在这种情况下可以赋值,但是它没有反映在参数x,y,z中,所以我只是觉得我遗漏了一些东西。还使用node.js检查了它,显示了相同的行为。不,那么我可以使用x,y,z参数列表。我想在函数开头的现有实现中加入一个对函数的调用,该函数只需将参数和一些默认值作为参数,例如
默认值(参数,“string=nana”,“number=4”)
,因此指定实际参数的名称会以某种方式增加不必要的开销。感谢您的解释,这是可行的,但是,嗯,是的,这并不简单。我认为arguments对象在某种程度上被黑魔法绑定到参数,但它反映了当前传递的参数。所以现在我更清楚了。我不知道。
function argTest(x, y, z) {
    x = typeof x !== 'undefined' ? x : ...;
    y = typeof y !== 'undefined' ? y : ...;
    // etc.
}
function argtest(x, y, z) {
    defaults({
        length: argtest.length,

        get '0'() { return x; },
        set '0'(val) { x = val; },

        get '1'() { return y; },
        set '1'(val) { y = val; },

        get '2'() { return z; },
        set '2'(val) { z = val; }
    }, ...);

    // ...
}