Javascript闭包教程
javascript closure tutorial from eloquent javascript
这个问题非常类似于这个线程Javascript..在本教程中完全丢失了。
function findSequence(goal) {
function find(start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
print(findSequence(24));
我被卡在这部分了:
find(start * 3, "(" + history + " * 3)");
每次start超出目标,它会做什么?它说返回null但是当我测试并在
上设置断点时 if (start == goal) it shoes this on the console
history: "(((((1 + 5) + 5) + 5) + 5) + 5)"
start: 26
history: "(((((1 + 5) + 5) + 5) + 5) * 3)"
start: 63
它加起来*3,起飞+5,我不明白为什么。
返回语句
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
是包含"||"操作符的表达式。该运算符将使左侧被求值。如果结果不是null、0、false
或空字符串,则返回该值。如果它是其中一个" false "值,则计算第二个表达式并返回。
换句话说,它可以重写成这样:
var plusFive = find(start + 5, "(" + history + " + 5)");
if (plusFive !== null)
return plusFive;
return find(start * 3, "(" + history + " * 3)")
如果"start"超过"goal",函数返回null。当然,如果两个选项都不起作用,那么整个东西将返回null。
表达式:
find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)")
将首先尝试求值:
find(start + 5, "(" + history + " + 5)")
如果返回值不是null、0、false或空字符串,则语句求值为返回值。如果返回值为null、0、false或空字符串,则接下来将计算以下内容:
find(start * 3, "(" + history + " * 3)")
如果返回值不是null、0、false或空字符串,则语句求值为返回值。如果返回值为null、0、false或空字符串,则该语句的计算结果为null、0、false或空字符串(以*3函数调用返回的值为准)。
所以这行:
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)")
就像是在说:"我要试着通过猜测这一步加5来找到解,如果这一步不行,我就试着在这一步乘以3,如果不行,我就放弃!"
相关文章:
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- Javascript.闭包和dynamic'这'实际上具有约束力
- 构造函数函数闭包变量
- 闭包js框架-将ArrayBuffer转换为字符串
- 如何在Angularjs中重构闭包中的重复代码
- 如何告诉闭包javascript编译器不要混淆webkitAudioContext的方法名称
- Google闭包和生成的getters/ssetter
- 如何冻结函数's在闭包中的变量
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- Javascript闭包教程
- 你知道有什么视频教程纯粹关注JavaScript中的闭包吗