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.
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常见面试题的更多相关文章
- 【javascript常见面试题】常见前端面试题及答案
转自:http://www.cnblogs.com/syfwhu/p/4434132.html 前言 本文是在GitHub上看到一个大牛总结的前端常见面试题,很多问题问的都很好,很经典.很有代表性.上 ...
- 【持续更新】JavaScript常见面试题整理
[重点提前说]这篇博客里的问题涉及到了了JS中常见的的基础知识点,也是面试中常见的一些问题,建议初入职场的园友Mark收藏,本文会持续更新~ 1. 引入JS的三种方式 1.在HTML标签中直接使用,直 ...
- JavaScript 常见面试题
此文内容多为 JavaScript 对数组理解及运用. 1.如何消除一个数组里面重复的元素? var arr = [1, 2, 3, 3, 4, 4, 5, 5, 6, 1]; var newArr ...
- javascript常见面试题之一:数组的冒泡排序;
var arr=[32,2,7,78,90,10]; //外层循环控制轮数: for (var i = 0; i < arr.length; i++) { //内层循环控制次数: for (va ...
- javascript常见面试题之一:将字符串'get-element-by-id'转换成驼峰命名法;
var str='get-element-by-id'; function strToupper(str) { //利用split将字符串分割成数组var arr= str.split('-'); f ...
- 整理的最全 python常见面试题(基本必考)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- 整理的最全 python常见面试题
整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...
- java常见面试题及答案 1-10(基础篇)
java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...
- Web开发的常见面试题HTML和HTML5等
作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...
随机推荐
- 服务器上的Git
前面的话 如果想与他人使用,除了使用Git来完成日常工作之外,还需要一个远程的Git仓库.尽管从技术上可以从个人的仓库里推送和拉取修改内容,但并不鼓励这样做,因为一不留心就很容易弄混其他人的进度.因此 ...
- 利刃 MVVMLight 5:绑定在表单验证上的应用
表单验证是MVVM体系中的重要一块.而绑定除了推动 Model-View-ViewModel (MVVM) 模式松散耦合 逻辑.数据 和 UI定义 的关系之外,还为业务数据验证方案提供强大而灵活的支持 ...
- 深入理解MVC
首先我们来看看MVC架构的示意图: 和访问者交互的是控制层(Controller层),控制器(controller)是同类交互的集合,每一个交互的操作,都对应了一个动作(act ...
- 笔记:查看linux系统开机时间
[root@localhost ~]# uptime -s -- :: 通过命令uptime -s 查看系统开机时间
- Centos7完全分布式搭建Hadoop2.7.3
(一)软件准备 1,hadoop-2.7.3.tar.gz(包) 2,三台机器装有cetos7的机子 (二)安装步骤 1,给每台机子配相同的用户 进入root : su root ---------& ...
- HashMap 学习笔记
先摆上JDK1.8中HashMap的类注释:我翻译了一下 /** * Hash table based implementation of the <tt>Map</tt> i ...
- 局域网内补丁更新80072EE2错误
在公网中,80072ee2通常是在进行自动更新时遇到的连接性错误.通常由于三防杀毒软件或者浏览器,代理服务器设置不正确而导致的.那么如果是在局域网中遇到该问题,该如何解决呢? 错误截图: 1.首先确认 ...
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- Dora.Interception: 一个为.NET Core度身定制的AOP框架
多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码.之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码写在一个地方,然后采用“注入”的方式将 ...
- js判断字符串是否全为空(使用trim函数/正则表达式)
我们需要判断用户输入的是否全是空格,可以使用以下方法: 方法一: 使用trim() /* 使用String.trim()函数,来判断字符串是否全为空*/ function kongge1(test) ...