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( ...
随机推荐
- 【模板】链式前向星+spfa
洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...
- 将ImageList中的图片转化成byte数组
Image imgwd = this.imageList1.Images["wd.png"]; var bytes = ImageToBytes(imgwd); public by ...
- JS前端数据格式化
当我们从后台取了数据,但是我们希望在前台统一显示格式时,我们可能需要格式化数据. 今天正好总结一下前端JS格式化数据的几个方法: 1. toFixed() 方法 可把 Number 四舍五入为指定 ...
- pwm最后的解释
之前学东西总是模模糊糊,前几天看了pwm,虽然知道怎么配置,但是如果让我自己去写一个pwm的程序,我却不知如何下手. 不知道如何配置他的频率和占空比.今天痛定思痛,决定彻底搞懂pwm. 百度给 的答案 ...
- JS+html--实现图片轮播
大家肯定见过某些网站一个炫酷的页面,就是图片轮播,也就是我们常说的幻灯片播放.对于初学者来说,可能会有点头疼,没关系,小李在这给大家献上自己刚刚写好的关于图片轮播的代码. 以下功能的实现用了jQuer ...
- webService基础知识--认识WebService
之前在找工作的时候,有面试官问到WebService,当时没有接触过,正好现在做的项目中有用到WebService,所以就趁着业余时间来学习了. 一.简介 先来看看百度百科对WebService的解释 ...
- Oracle中碰到的函数和关键字收集
一.时间处理函数 trunc(sysdate) 返回日期 to_date() to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') to_number() 转为数字 二.字 ...
- Android WebView导入HTML使Js生效的方法
WebSettings ws = webview.getSettings(); ws.setJavaScriptEnabled(true);//加上这句 webview.loadDataWithBas ...
- C#基础知识-流程控制的应用(四)
流程控制我们在编程中运用到的地方非常的多,在上篇中仅仅只是简单的介绍每一种的使用,并没有运用到实例中,很难去理解它真正的作用.下面我们将实际的运用流程控制的代码写一些实例相关的程序,加深对流程控制的理 ...
- 读《Java并发编程的艺术》(一)
离开博客园很久了,自从找到工作,到现在基本没有再写过博客了.在大学培养起来的写博客的习惯在慢慢的消失殆尽,感觉汗颜.所以现在要开始重新培养起这个习惯,定期写博客不仅是对自己学习知识的一种沉淀,更是在督 ...