前些天領導給寫了一個不太熟悉的函數: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>按順序,您都調用所提供的函數。