1、什么是闭包?闭包产生的背景?有什么问题?怎么解决?举一个闭包的例子?
答:
什么是闭包:一个函数内部有另一个函数,内部的函数能使用外部函数的变量和方法。
闭包产生的背景:1)作用域的问题,全局作用域无法访问局部作用域
2)垃圾回收机制,执行完的函数和不在被引用的变量的内存会被销毁。
3)全局污染的问题,变量和函数名的冲突。
问题:这些问题的出现需要解决,那么闭包就应运而生了。但是由于闭包会长期占用内存,这样就会导致内存的泄露,这个也是闭包的最大问题。
解决:1)理解闭包,后期尽量避免闭包的使用。
2)手动销毁,使用完的函数或者变量,让其变量名等于null。
举例:页面上li输出相对应的索引值,经典的面试题。
for(var i = 0;i < lis.length;i++){
lis.οnclick= (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;
}