gpt4 book ai didi

javascript - 将参数对象分配给变量

转载 作者:行者123 更新时间:2023-12-02 16:12:08 24 4
gpt4 key购买 nike

所以,我对 Javascript 很陌生,并且想知道使用 NodeJS 的 arguments 对象(可能就像任何刚接触该语言的人一样)。

考虑这个代码片段,它简单地实现了 printf 样式格式

function format(formatString) {
var i = 1;
return formatString.replace(regex, function(match) {
switch(match) {
case "%s": return arguments[i++];
}
});
}

调用函数 format("Hi my name is %s. Im %s years old", "Jon", "30") 会产生以下输出 My name is 11.我的名字是 %s。我%s岁了

参数的研究表明,我们在这里处理的不是“真正的”数组,而使用Array.slice(arguments)实际上会生成一个数组。然而,我正在努力解决以下事实:

执行这个简单的赋值 var args = argument 并引用 args 而不是 arguments 让我的代码完美工作(我偶然发现了这个检查util.format 的 NodeJS 源代码)

现在我的问题是,V8在这里修炼的是什么黑魔法?后台是否有进行任何转换?如果的话,是什么样的转换? Node 告诉我这两个变量都是 object 类型。

预先感谢您帮助我。

最佳答案

这行不通。 arguments 仅表示其所在函数内部的任何内容。在您的情况下,arguments 引用匿名函数的参数。您需要捕获父作用域中的参数。像这样的东西:

function format(formatString) {
var i = 1, args = Array.prototype.slice.call(arguments);
return formatString.replace(/%[a-z]/gi, function(match) {
switch(match) {
case "%s": return args[i++];
}
});
}
format("Hi my name is %s. Im %s years old", "Jon", "30");

// Output: "Hi my name is Jon. Im 30 years old"

关于javascript - 将参数对象分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com