javascript 面试题-1

function foo(){

    for(var i = 1 ; i < 4 ; i ++){

         setTimeout(function(){ console.log(i)},0);

    }
}

foo();
//输出结果是 4,4,4


//要想输出1,2,3
//采用自执行匿名函数
function foo(){

   for(var i = 1 ; i < 4 ; i ++){

      setTimeout((function(a){console.log(a)})(i),0);
  }

}

 关于自执行匿名函数可以参考

http://www.cnblogs.com/tomxu/archive/2011/12/31/2289423.html

//大致意思是这样

var foo = function () {} 

//foo + () 就是执行这个方法
foo() 

//函数的另外一种定义
function(){}

//我们加上括号就会报错
function(){} ()

//但是当我们用 () 包住前面一段代码的时候
//像下面这样 就不会报错, 这也就是常遇到自执行函数了
(function(){})() 
//去除重复的字符串 数组中
var deduplication = function (arr){

     if(!arr instanceOf Array){
              return ; 
       }

     var len = arr.length ; 

     if(len <= 1){

        return arr ; 
     }

    var ret = arr[0];

    for(var i = 1 ; i < len ; i++){

         if(ret.indexOf(arr[i]) == -1){
               ret = ret + arr[i];
         }

   }

   return ret.split("");
}
//计算n!

var cal = function(n){

         if(n <= 1){

            return 1 ; 
         }else{

                //return  n * cal(n-1);
                return n * arguments.callee(n-1); 

          }

         

}

猜你喜欢

转载自xyuwe.iteye.com/blog/2171611