最近面试前端遇到的一些面试问题

1.数组从小到大排序有哪些方法?

利用数组Aarr.sort()排序

var arr = [45,3,12,4,8,25];

       function compare(a,b){
        	return a-b;
        }

  arr.sort(compare);

====================================================================================

 for遍历数组对比

  var arr = [45,3,12,4,8,25];

   var min;
   for(var i=0;i<arr.length;i++){

   for(var j=i;j<arr.length;j++){

    if(arr[i]>arr[j]){
         min=arr[j];
         arr[j]=arr[i];
         arr[i]=min;
          }
        }
     }

    console.table(arr);

 

 2.一个关于闭包的题目

  var  name = 'Hello';

      (function(){

        if(name==undefined){

             var name = 'Jack';

             console.log('you are'+' '+name)

         }else{

             console.log(name+'world');

         }

      })()  

 这段代码最终输出是  you are Jack

 在这我们聊聊闭包问题吧

 闭包的概念:

 我的理解是,闭包就是能够读取其他函数内部变量的函数。

优点

1.保护函数内的变量安全,加强了封装性

2.在内存中维持一个变量(用的太多就变成了缺点,占内存)
 

缺点:

闭包有一个非常严重的问题,那就是内存浪费问题,这个内存浪费不仅仅因为它常驻内存,更重要的是,对闭包的使用不当会造成无效内存的产生。

 

 console.log("100"+2-"1") // number 1001

 typeof (1+"5"); // string 15

 typeof (1-"5"); //number -4

 typeof (NaN);// number

 typeof null; // object

 typeof underfined // undefined

 

 这里要记住的是 “+” 有字符串存在就是连接字符串了 

 

=====================================================

 

var a = '数据1';

var obj = {
  a:'数据2',
  pro:{
    a:'数据3',
    getName:function(){
       return this.a;
    }
  }
}

console.log(obj.pro.getName());//数据3

var test = obj.pro.getName;

console.log(test());// 数据1

===========================================================

考察作用域

 

  function fn(){
  	var arrFn = new Array();

  	for(var i=0;i<5;i++){
  		arrFn[i] = function(){
            return i;
  		}
  	}

  	return arrFn;


  }

  var box = fn();

  for(var j=0;j<box.length;j++){
  	  console.log(box[j]());//   5 5 5 5 5
  }