JS面试题(持续更新)

//这道题涉及了异步、作用域、闭包
/* 
    setTimeout是异步执行,所以for会先执行完,因为同步优于异步优于回调函数
     每一次for循环的时候,settimeout都执行一次,但是里面的函数没有被执行
    而是被放到了任务队列里面,等待执行,for循环了4次,就放了4次,当主线程执行完成后,才进入任务队列里面执行  
 */
for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

//输出:5

 

/*
 *  模拟重载
 * JS因为其函数参数是作为一个数组来存在的,所以JS没有函数签名,无法实现真正的重载
   但是通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载   
*/
function overLoading(){
  //根据arguments.lengthd对不同的参数数量进行操作
  switch(arguments.lengthd){
      case 0:
               //操作1的代码;
               break;
      case 1:
              //操作2的代码;
               break;
 //后面还有许多case。。。。。  
      default: console.log('函数出错');      
    }  
   
}
//重载:具有一组相同名字,不同参数列表的函数(方法)。
//JS中“函数是一个对象,函数名是一个指向对象的指针”所以这也可以帮助我们理解JS为什么无法实现重载
function addSomeNumber(num) {
    return num + 100;
}
function addSomeNumber(num) {
    return num + 200;
}
var result = addSomeNumber(100);
console.log(result);
//输出:300

 

//寻找数组最大和最小数值的方法
//第一种:排序法
var arry = [3,2,5,1,6,7];
arry.sort(function(a,b){return a-b;});
var minN = arry[0];
var maxN = arry[arry.length-1];
console.log(minN);
console.log(maxN);
//先升序排序然后再根据升序后的元素位置找到当前最小最大的元素

//第二种:Math的max和min方法
//利用apply的扩充作用域然后使用Math方法
var arry = [3,2,5,1,6,7];
var max = Math.max.apply(Math,arry);
var min = Math.min.apply(Math,arry);
console.log(min);
console.log(max);

 

posted on 2018-12-07 16:20  城外三石  阅读(108)  评论(0)    收藏  举报

导航