javascript常见面试题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript常见面试题相关的知识,希望对你有一定的参考价值。

闭包相关面试题:
1.
var a=0,b=0;
function A(a){
 A=function(b){console.log(a+b++);};
 console.log(a);
}
A(1);
A(12);

A(1)正常执行,console.log(a);//1   当A函数被调用后  会创建一个全局的A函数,覆盖了原有的A函数,但是a作为受保护变量被保护起来形成闭包

此时 函数A变为

//A:function(b){(a=1)
// console.log(a+b++);
// };
(a=1)作为受保护变量
当再次调用A(12)时 返回 console.log(a+b++);//1+12 结果为13;

2.
 1 function fun(n,o){
 2   console.log(o);//每次都输出第二个参数
 3   return {//返回一个对象
 4     fun:function(m){//对象中包含函数
 5       return fun(m,n);//函数内保护了外层函数第一个参数
 6     }
 7   }
 8 }
 9 var a=fun(0);
10     a.fun(1);
11      a.fun(2);
12      a.fun(3);
var b=fun(0).fun(1).fun(2).fun(3);
var c=fun(0).fun(1); c.fun(2);c.fun(3);

fun()函数这个问题的主线:每次都输出第二个参数,并创建闭包封装第一个参数,闭包中的变量会自动成为下次调用的第二个参数

下面细看下这个问题:var a=fun(0);

    //console.log(o);//undefined

    //a:{fun:function(m){(n=0) return fun(m,n)}}  此时n=0作为受保护变量 封装到闭包中

     a.fun(1);//fun(1,0);  console.log(0);//0  

   a.fun(2);//fun(2,0);  console.log(0);//0

   a.fun(3);//fun(3,0);  console.log(0);//0

对于

var b=fun(0).fun(1).fun(2).fun(3);
具体分析如下:
//var b=fun(0) //undefined
// //{fun(m){(n=0) return fun(m,n); }}
// .fun(1) //0
// //{fun(m){(n=1) return fun(m,n); }}
// .fun(2) //1
// //{fun(m){(n=2) return fun(m,n); }}
// .fun(3);//2
////b: {fun(m){(n=3) return fun(m,n); }}

对于 

var c=fun(0).fun(1); c.fun(2);c.fun(3);
具体分析如下:
//var c=fun(0) //undefined
// .fun(1);//0
////c: {fun(m){(n=1) return fun(m,n)}}
// c.fun(2);//1
// c.fun(3);//1

 1 var funs=(function(){
 2   for(var i=0,arr=[];i<3;i++){
 3     arr[i]=function(){console.log(i)};
 4   }//i=3
 5   return arr;
 6 })();
 7 ////funs:[(i=3)
 8 //// function(){console.log(i)},
 9 //// function(){console.log(i)},
10 //// function(){console.log(i)}
11 //// ]
12 funs[0]();//3
13 funs[1]();//3
14 funs[2]();//3

这个题目主要是考察循环创建函数时 ,并没有调用函数,所以将

function(){console.log(i)};原样放到数组funs中,当调用funs中的函数时,才执行console.log ,此时  i 已经是循环结束的结果3了 
所以三个结果都是输出3

以上是关于javascript常见面试题的主要内容,如果未能解决你的问题,请参考以下文章

Node.js常见面试题

javascript常见面试题之一:数组的冒泡排序;

持续更新JavaScript常见面试题整理

面试题Java基础篇-常见面试题总结p3

面试题MySQL常见面试题合集

ajax常见面试题