闭包相关面试题:
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.
 function fun(n,o){
console.log(o);//每次都输出第二个参数
return {//返回一个对象
fun:function(m){//对象中包含函数
return fun(m,n);//函数内保护了外层函数第一个参数
}
}
}
var a=fun(0);
a.fun(1);
a.fun(2);
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
 var funs=(function(){
for(var i=0,arr=[];i<3;i++){
arr[i]=function(){console.log(i)};
}//i=3
return arr;
})();
////funs:[(i=3)
//// function(){console.log(i)},
//// function(){console.log(i)},
//// function(){console.log(i)}
//// ]
funs[0]();//
funs[1]();//
funs[2]();//

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

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

javascript常见面试题的更多相关文章

  1. 【javascript常见面试题】常见前端面试题及答案

    转自:http://www.cnblogs.com/syfwhu/p/4434132.html 前言 本文是在GitHub上看到一个大牛总结的前端常见面试题,很多问题问的都很好,很经典.很有代表性.上 ...

  2. 【持续更新】JavaScript常见面试题整理

    [重点提前说]这篇博客里的问题涉及到了了JS中常见的的基础知识点,也是面试中常见的一些问题,建议初入职场的园友Mark收藏,本文会持续更新~ 1. 引入JS的三种方式 1.在HTML标签中直接使用,直 ...

  3. JavaScript 常见面试题

    此文内容多为 JavaScript 对数组理解及运用. 1.如何消除一个数组里面重复的元素? var arr = [1, 2, 3, 3, 4, 4, 5, 5, 6, 1]; var newArr ...

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

    var arr=[32,2,7,78,90,10]; //外层循环控制轮数: for (var i = 0; i < arr.length; i++) { //内层循环控制次数: for (va ...

  5. javascript常见面试题之一:将字符串'get-element-by-id'转换成驼峰命名法;

    var str='get-element-by-id'; function strToupper(str) { //利用split将字符串分割成数组var arr= str.split('-'); f ...

  6. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  7. 整理的最全 python常见面试题

      整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...

  8. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  9. Web开发的常见面试题HTML和HTML5等

    作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...

随机推荐

  1. 跟着刚哥梳理java知识点——集合(十二)

    Java集合分为Collection和Map两种体系 一.Collection接口: Collections接口为我们提供了以下方法: size():返回集合中元素的个数 add(Object obj ...

  2. 初学VUE2.0

    初学VUE2.0 (个人笔记,写完后发现好乱....下期使用markdown书写.) 概述 webstorm添加对VUE的支持 http://www.jianshu.com/p/142dae4f8b5 ...

  3. JS绑定种类汇总

    这里是<你不知道的JS>中常见的this绑定种类分享: 1)默认绑定: function foo(){ console.log(this.a); } var a = 2; foo(); 解 ...

  4. webrtc学习笔记1(建立连接基本流程)

    最近在做一个基于webrtc的视频软件,以下是自己对于上层建立通话连接流程的基本理解,记录于此. 假设A和B要建立视频通话,A为房间创建端,B为加入房间端: 1.A通过http登录.获取其他服务器地址 ...

  5. SpringMVC 国际化-中英文切换

    项目结构 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...

  6. 用Python设计一个经典小游戏

    这是关于Python的第9篇文章,介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习 ...

  7. 关于Ubuntu的ssh免密登录

    1.打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"--> ...

  8. list和map集合

    List特点:元素有放入顺序,元素可重复Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)Map特点: ...

  9. Redis学习-持久化

    Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执行的所有写操作命令 ...

  10. FileInputStream和FileOutputStream详解

    一.引子 文件,作为常见的数据源.关于操作文件的字节流就是 FileInputStream & FileOutputStream.它们是Basic IO字节流中重要的实现类.二.FileInp ...