Closure in JavaScript from CoderSchool
Closure in JavaScript from CoderSchool
我在CodeSchool上学习。在看教程时,我被一个例子弄糊涂了。他们在视频中试图解释的是,在循环中创建的闭包直到最后一分钟才会绑定。此代码的目的是在数组中对其进行名称检查,并单独返回名称及其位置(没有零约定)。由于闭包直到最后一分钟才绑定,因此此代码返回z 5
。我很困惑为什么这个代码返回的是5而不是4。我的数组的长度是4,for循环在4之前停止,因为i < passengerArray.length
相当于i < 4
,因此检查的最后一个索引应该是passengerArray[3]
,这意味着我的(i+1)
最后应该是4,而不是5。我希望这是有道理的。这件事困扰了我一整天。
function assignTorpedo(name, passengerArray)
{var torpedoassignment;
for(var i = 0; i < passengerArray.length; i++){
if(passengerArray[i] == name){
torpedoAssignment = function(){
console.log(name + " " + (i+1));
};
}
}
return torpedoAssignment;
}
var give = assignTorpedo("z",["z","a","b","c"]);
give();
当测试条件失败时,for
循环结束。为什么会失败?因为i
是而不是小于4;它等于4。因此,在console.log()
输出中,您可以看到5。
此外,声明
在循环中创建的闭包直到最后一分钟才会绑定。
是描述事物如何运作的一种奇怪的方式。一旦在数组中找到名称,就会为变量分配一个对构造函数的引用。当assignTorpedo
返回该值时,闭包存在。在闭包中,变量"i"的值已经是4。
以下语句在每次通过循环后将i
递增1。因此,在第四次迭代后,i
将增加一,并再次针对该条件进行测试,然后它将失败。
var arr = ["z","a","b","c"];
for ( var i = 0; i < arr.length; i++ ) {
console.log( i );
}
console.log( i );
当违反条件"i<passengerArray.length"时,For循环结束,此时i等于4。
然后是console.log(名称+"+(4+1));
电源提示:
来自我在大学的一位讲师,
"把"For"循环想象成这样的"While"循环"
i = 0;
while (i < passengerArray.length)
{
...............
i++;
}
相关文章:
- Validate JSON from Mongo?
- Get JSON from an url
- creating objects from variables ES6
- getting id from jsp
- jquery使用name from变量按类选择元素
- Using jQuery with classes from ES6
- 如何计算与php中的CRC32函数兼容的arrayBuffer(javascript中的From FileReader)
- 如何删除'被按压'state from复选框
- 当我的所有 Ng-from 都有效时启用一个按钮
- getDocument by id/get input text from button dons'不起作用
- Calling VB.Net from Javascript
- Blob from DataURL?
- PDF Generation from DOM?
- AWSELB Cookie access from Javascript
- 转换类似数组的对象Array.prototype.slice或Array.from
- fetch data from db using javascript & php
- 在Stripe Checkout from表单中预先填充电子邮件
- 如何从表单变量对象中获取特定的from属性
- 返回List<字符串>Jquery中的from JSON调用具有未定义的长度
- Closure in JavaScript from CoderSchool