前些天领导给写了一个不太熟悉的函数:javascript
var phonenum = document.querySelectorAll(".phonenum");//手机号码java
[].forEach.call(phonenum, function(item, index) {数组
item.addEventListener('blur', function(event) {函数
phoneCheck(phonenum,this); this
},false); spa
});prototype
看不太懂因而上网查了一下(如下是转载,原文连接:https://stackoverflow.com/questions/16053357/what-does-foreach-call-do-in-javascript):索引
[]是一个数组,这个数组根本不用,它被放在页面上,由于使用数组能够访问数组原型,例如.forEach。ip
这比打字更快 Array.prototype.forEach.call(...);原型
接下来,forEach是将函数做为输入的函数...
[1,2,3].forEach(function (num) { console.log(num); });
...而且对于每一个元素this(其中this是数组式的,由于它有一个length,你能够访问它的部分this[1]),它将经过三件事情:
一、数组中的元素
二、元素的索引(第三个元素将经过2)
三、对数组的引用
最后,.call是一个函数的原型(它是一个在其余函数上调用的函数)。
.call将采用其第一个参数,并将this其中的任何内容替换为常规函数call,做为第一个参数(undefined或null将window在平常JS中使用,不然将在“strict-mode”中使用)。
其他的参数将被传递给原来的函数。
[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"
所以,您正在建立一个调用该forEach函数的快速方式,而且您正在this从空数组更改成全部<a>标记的列表,而且对于每一个<a>按顺序,您都调用所提供的函数。