JS常见面试题(四)

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值