1、什么是闭包?闭包产生的背景?有什么问题?怎么解决?举一个闭包的例子? 答: 什么是闭包:一个函数内部有另一个函数,内部的函数能使用外部函数的变量和方法。 闭包产生的背景:1)作用域的问题,全局作用域无法访问局部作用域 2)垃圾回收机制,执行完的函数和不在被引用的变量的内存会被销毁。 3)全局污染的问题,变量和函数名的冲突。 问题:这些问题的出现需要解决,那么闭包就应运而生了。但是由于闭包会长期占用内存,这样就会导致内存的泄露,这个也是闭包的最大问题。 解决:1)理解闭包,后期尽量避免闭包的使用。 2)手动销毁,使用完的函数或者变量,让其变量名等于null。 举例:页面上li输出相对应的索引值,经典的面试题。 for(var i = 0;i < lis.length;i++){ lis.onclick= (function( num ){ return function(){ alert(num ) ; }; })(i ); 2、实现冒泡排序和数组去重? 答: 1)冒泡排序 var arr =[2,4,1,6,7,8,33,11]; function sort( array){ //使用双循环去遍历数组,第一个循环取 array 的一个数据,第二个循环拿上个循环数据的后面一个数据,两个数据进行比较。 for(var i = 0;i< array.length;i++){ for(var j = i+1;j < array.length;j++){ if(array > array[j] ){ varnum = array; array = array[j]; array[j] = num; } } }//return 根据需要可写可不写。return array; } 2)数组去重 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; function rep(arr) { var ret = []; for (var i = 0; i <arr.length; i++) { if (arr.indexOf(arr)== i){ ret.push(arr); } } return ret; }
|