当我来到一个描述函数递归的章节时,我是Javascript的新手并正在阅读它.它使用示例函数来查找第n个Fibonacci序列.代码如下:
function fibonacci(n) {
if (n < 2){
return 1;
}else{
return fibonacci(n-2) + fibonacci(n-1);
}
}
console.log(fibonacci(7));
//Returns 21
Run Code Online (Sandbox Code Playgroud)
我无法准确掌握这个功能正在做什么.有人能解释一下这里发生了什么吗?我被困在第5行,函数调用自己.这里发生了什么事?
在道格拉斯·克罗克福德(Douglas Crockford)的书"Javascript:The Good Parts"中,他提到了将值传递给一个新对象的对象说明符.本质上,他建议不要以特定的顺序将参数传递给函数,而是建议传递一个包含在其中的参数的对象,如下所示:
var myObject = someFunction({a: 1, b: 2, c: 3});
Run Code Online (Sandbox Code Playgroud)
然而,没有解释的是如何在它们通过之后处理这些参数.而不是执行以下操作来设置默认值:
function someFunction(params){
this.a = params.a || 0;
this.b = params.b || 0;
...
}
Run Code Online (Sandbox Code Playgroud)
处理大量参数而不是冗长的另一种方法是什么?
编辑:看看下面的答案,使用for-in循环是一个很好的选择.在为每个属性设置不同的默认值时,另一种方法是什么?有没有办法创建一个具有各种默认值的对象并与之进行比较?
我正在经历一个代码库,遇到了一个我有疑问的问题.这是我以前从未见过的东西,我想知道是否有人可以为我解释.这是代码:
$variableName = $array[1];
$variableName{0} = strtolower($variableName{0});
$this->property = $variableName;
Run Code Online (Sandbox Code Playgroud)
用于什么花括号?我以前用花括号将变量定义为变量名,但这是一回事吗?我似乎无法在网上找到解释它的任何资源,但我不确定我是否正在寻找合适的东西.
我试图用来awk检查三列数据集的第二列,如果它不为零,则替换它的值.我发现这个正则表达式查找非零数字,但我无法弄清楚如何结合gsub使用print,以取代内容,并输出到一个新的文件.我只想gsub在第二列上运行,而不是第一列或第三列.awk这样做有一个简单的单行程吗?还是我在做一些更复杂的事情?我甚至试过做一个表达来检查零,但我不知道怎么做if/else语句awk.
我半成功的命令是:
awk '$2 != 0 {print $1, 1, $3}' input > output
问题是如果第二列为零,它不会打印出行.这是我认为的任何一个gsub或if/else语句可以工作,但我无法弄清楚awk语法.任何有关这方面的指导将不胜感激.
awk ×1
curly-braces ×1
fibonacci ×1
function ×1
if-statement ×1
javascript ×1
object ×1
php ×1
recursion ×1
regex ×1
unix ×1
variables ×1