A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马