1 //参考《javascript高级程序设计》的典型方法 2 function makeclosures(arr, fn) { 3 var result = new array(); 4 for(var i=0;i<arr.length;i++){ 5 result[i] = function(num){ 6 return function(){ 7 return fn(num); 8 9 } 10 }(arr[i]); 11 } 12 return result; 13 } 14 15 //使用es5的bind()方法 16 function makeclosures(arr, fn) { 17 var result = new array(); 18 for(var i=0;i<arr.length;i++){ 19 result[i] = fn.bind(null,arr[i]); 20 } 21 return result; 22 } 23 24 //使用foreach() 25 function makeclosures(arr, fn) { 26 var result = new array(); 27 arr.foreach(function(curr){ 28 result.push(function(){return fn(curr)}); 29 }) 30 return result; 31 } 32 33 //使用let 34 function makeclosures(arr, fn) { 35 var result = new array(); 36 for(let i=0;i<arr.length;i++){ 37 result[i] = function(){ 38 return fn(arr[i]); //let声明的变量只在let所在代码块内有效,因此每次循环的i都是一个新的变量 39 }; 40 } 41 return result; 42 }
如对本文有疑问, 点击进行留言回复!!
vue源码实战render.js与$nextTick的异步调用
网友评论