是否可以使用隐藏/额外的参数初始化变量
Is it possible to initialize a variable with a hidden/extra argument?
记住,我只编写了两周的代码,我找不到任何关于如何在递归函数调用中使用隐藏/额外参数初始化变量的信息。有可能吗?而且,如果可能的话,是否存在这样做是最佳实践的情况?
这个问题是在我对CoderByte挑战10(字母汤——取一个字符串,然后返回一个按字母顺序相同长度的字符串)的一个超级不雅的答案时出现的。[注意:是的,我知道我的答案是愚蠢的,有更好的方法来解决问题。我不需要帮助解决这个问题。我只将此代码作为我问题的上下文。]
从本质上讲,我想问是否有一种方法可以删除newStr作为参数(因为Java Script函数可以接受额外的参数),并仍然通过递归增长的答案字符串?如果我只是简单地删除newStr作为参数,那么newStr将不再初始化。但是,如果我在函数体中初始化newString(var newStr="),我就无法继续递归地传递排序后的字符串。如果有一种方法可以做到这一点,那么在用例中这种方法是否有意义?或者,这只是一个标志,上面写着,"换一种方式做。"
完整代码:
function AlphabetSoup(str, newStr) {
var alphabet = "abcdefghijklmnopqrstuvwxyz";
var testVal= 0;
//I'M ATTEMPTING TO PASS THROUGH AN ANSWER STRING THAT IS GROWING RECURSIVELY
if (newStr == null)
var newStr = "";
if (str.length == 0)
return newStr;
for (var i = 1; i < str.length; i++) {
if (alphabet.indexOf(str[0]) <= alphabet.indexOf(str[i])) {
testVal += 1;
}
}
// When the first letter, str[0], is ealier in the alphabet than every other letter
if (testVal == (str.length - 1)) {
//add the first letter to the newStr
newStr = newStr + str[0];
//remove the first letter from the input string
str = str.substr(1);
//recursively call AlphabetSoup to continue building newStr
return AlphabetSoup(str, newStr);
}
//When the first letter isn't the earliest in the alphabet
else {
//put in in the back of str
str = str.substr(1) + str[0];
//until we find the next letter earliest in the alphabet
return AlphabetSoup(str, newStr);
}
}
console.log(AlphabetSoup("hooplah"));
当然,您可以检查arguments.length
并用arguments[1]
初始化变量,如果这是您所指的"JavaScript函数可以接受额外的参数",但这相当粗糙。在那里争论没有错。如果不想将其公开给调用方,请将递归函数封装在另一个只有单个参数的函数中。
在开始时检查newStr
的想法是JS中的一种常见模式。但不要检查是null
,而是undefined
:
if (typeof newStr == "undefined") {
var newStr = "";
}
如果您编写ES6(或Coffeescription),您可以为参数设置默认值:
function AlphabetSoup(str, newStr = '') {
// ...
}
相关文章:
- 使用javascript函数在页面初始化后加载jquery
- 如何在javascript中初始化参数?document.getElementById(“DataAreaXa”).
- 是否需要初始化在 Javascript 中作为“类”构造函数参数传递的变量
- JS原型是否可以访问初始化期间传递给对象的参数
- 在 javascript 中通过初始化器函数传递参数时遇到问题
- npm 初始化处的 --yes 参数是什么意思
- RequireJS - 将参数传递到模块中进行初始化
- 初始化后重置引导模式参数
- 传递参数以初始化函数
- 是否可以使用隐藏/额外的参数初始化变量
- 在Backbone.js中,通过在选项中传递模型来初始化视图和将模型对象作为参数传递有什么区别
- 初始化后设置TinyMCE编辑器参数
- 用“日期”初始化的值是什么?日期选择器的beforeShowDay函数中的参数
- 如何在初始化之后传递参数给google maps对象
- 用不同的参数初始化对象
- 如果超类构造函数有参数,如何初始化超类
- 用不同的参数动态初始化服务
- 当用函数作为属性初始化对象时,参数是变量的名称,而不是其值
- 当我定义函数时,如何初始化javascript函数中的参数
- 我在哪里为WP TinyMCE设置初始化参数?