- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果有人能帮助我理解这一点,我将印象深刻。这是来自John Resig's advanced JavaScript的#28 .
这是一个循环函数,如果您查看教程,它似乎运行了 3 次,产生了下面的 6 Pass。
能否请您用通俗易懂的语言尽可能详细地解释这个程序中发生的事情,并一路解释:
fn.call(array, array[i], i)
为什么函数有这 3 个参数,它们是如何工作的。该函数是否首先处理数组,然后是数组 [i],然后是 i?当这一切发生时,发生了什么?
此外,在函数中,我了解到 i++
每次通过 array.length 时都会增加,但是触发 num++
增加它的原因是值,以及 value == num++
在function(value, i)
中,什么是value
?循环数组的值是交替的0,1,2吗?如果是这样,这些循环数组编号如何作为参数传递给 function(value, i)
this instanceof Array
这试图显示什么?怎么样?
代码:
function loop(array, fn){
for ( var i = 0; i < array.length; i++ )
fn.call( array, array[i], i );
}
var num = 0;
loop([0, 1, 2], function(value, i){
assert(value == num++, "Make sure the contents are as we expect it.");
assert(this instanceof Array, "The context should be the full array.");
});
PASS Make sure the contents are as we expect it.
PASS The context should be the full array.
PASS Make sure the contents are as we expect it.
PASS The context should be the full array.
PASS Make sure the contents are as we expect it.
PASS The context should be the full array.
最佳答案
function
是匿名函数,即没有名字的函数。 loop
的完整第二个参数是
function(value, i) {
assert(value == num++, "Make sure the contents are as we expect it.");
assert(this instanceOf Array, "The context should be the full array.");
}
这是一个完整的匿名函数,它接受三个参数:this
(它是一个方法的对象)、当前值和循环计数器。
loop
遍历数组,并使用 fn.call
调用匿名函数,传递三个参数;这里,数组对象必须是显式的,因为 call
不知道应该在什么上下文中调用正在调用它的函数引用(也就是说,在调用中要做什么 this
)。
匿名函数,由 loop
调用, 接收数组为 this
.第二个ASSERT
验证这一点。它还期望数组的值为 [0, 1, 2]
并通过递增 num
来验证这一点在每次调用时将其与传递的数组元素进行比较。
因此,遵循执行链:
num
声明并初始化为 0。loop([0, 1, 2], function ...)
被调用。loop
调用 fn
、匿名函数、数组(如 this
)、它的第一个元素和 i
表示元素偏移量。 (i
从未实际使用过。)ASSERT
通过与 num
比较,它传递了预期的第一个元素 0并递增 num
之后。ASSERT
就是它的this
是一个 Array
.loop
调用 fn
与 #3 一样,但使用第二个数组元素。ASSERT
s,这次将传递的第二个数组元素(预期为 1)与 num
进行比较(由于步骤 4 中的后增量,它是 1)。loop
调用 fn
和以前一样处理第三个数组元素。ASSERT
s 再次,这次将预期的数组元素 2 与 num
进行比较现在的值为 2。关于javascript - 令人难以置信的循环功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335265/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!