这才只有两个嵌套,更多层的话你会疯掉的!解决这个问题的先要去了解一下Promise ,目前处理此类问题的js库有:Bluebird,Async.js 等等吧 9.如何实现对象方法的链式调用? 主要是生成对象,对象的每个方法里执行完想用的操作后return this(对象本身);举个栗子: 一个只有一个name属性的类,提供修改name和重置name的方法, //链式调用 function ChainTest(name){ this.name = name; this.originalName = name; } ChainTest.prototype.changeName = function(newName){ this.name = newName; return this; } ChainTest.prototype.reset = function(){ this.name = this.originalName; return this; } var chain = new ChainTest("zhangsan");//新建对象 console.log(chain.name )// zhangsan chain.changeName('lisi'); console.log(chain.name ) // lisi chain.changeName('wangwu').reset();//链式调用 console.log(chain.name ) // zhangsan 10.Number函数与parseInt函数有哪些区别? 答: Number():可以用于任何数据类型转换成数值; parseInt()、parseFloat():专门用于把字符串转换成数值; 转换规则具体可以参考:http://www.cnblogs.com/hyuq/p/4131200.html 编程题: 1.请将字符串“asjchbnwnkanhe”按照字典顺序排序 解题思路:1、将字符串分解成数组。2、将数组排序。3、合并成数组。 function sort(str){ var arr = str.split(""); arr = arr.sort(); var resStr = arr.join(""); return resStr ; } 2.NaN属于什么类型?请写一个判断函数,功能如下:只有输入NaN的时候为true,其余输入值全部为false 解题思路:typeof(NaN)看出NaN是一个number类型的数据。NaN和任何数包括NaN自身相比较都是false,所以不能直接根据if(NaN == NaN)进行判断,先判断是否为number类型,然后再看他是不是0,如果不是则为NaN function myIsNaN(num){ if(typeof(num) == "number"){ if(!num && num != 0){ return true }else{ return false } }else{ return false } } 3.请写出程序输出结果: var arr = []; (function run(){ var i=0; for(;i<5;i++){ arr.push(function(){ console.log(i); return i; }); } })(); arr = [] arr[2]();//请写出输出 var arr1 = arr.map(function(i){return i()}); var result = arr1.reduce(function(a,b){return a+b;}); console.log(result);//请写出输出 解题思路:首先run是一个自执行的函数,函数的功能是向arr[0] ~ arr[4] 中个放置一个函数,每个函数都是 function(){ console.log(i); return i; } 这个i引用的是run函数里的i,所以存在了一个闭包的现象(实际上数组里的每个元素都是这个函数,由于这个函数没有被执行,所以每个数组里的i是不确定的,只有到执行的时候i是什么值,输出才是什么值),所以 arr[2] = function(){ console.log(i); return i; } 执行的时候i是run函数里的i这时的i已经是5了,所以: arr[2]() 输出为5; var arr1 = arr.map(function(i){ return i() }); 这一步首先arr.map的返回值是一个数组,根据之前的分析可得: arr1 = [5,5,5,5,5]; 接下来就是这个: var result = arr1.reduce(function(a,b){return a+b;}); 首先是这个数组reduce函数(貌似不太常见这个方法),这个方法的的理解: reduce(callback, initialValue)会传入两个变量。回调函数(callback)和初始值(initialValue)。假设函数它有个传入参数,prev和next,index和array。prev和next你是必须要了解的。reduce(callback, initialValue)会传入两个变量。回调函数(callback)和初始值(initialValue)。假设函数它有个传入参数,prev和next,index和array。prev和next你是必须要了解的。如果不太理解的话请移步: http://www.jb51.net/article/60502.htm 先学一下,基本上就是遍历一下数组,但是每次遍历的是数组紧挨着的两个元素。 理解了这个函数之后应该很容易得出结果: result = 25; 4.一个楼梯一共n个台阶,每次可以走1个台阶或者走2个台阶,请编写代码,输入为n,输出为多少种不同的走法? 解题思路:这是一个算法题。(作为找前端的人来说,这道题实在浪费时间,而且不应该,重要的是发现规律,发现不了肯定解决不了了) 先运用一下高中的数学解题思维看一下规律: N Ways 1 1 //n=1 时只能走一步,所以只有一种方法 2 2 //n =2 时,一次走一步和一次走两步两种方法 3 3 //一次走一步,先走一步再走两步,先走两步再走一步 4 5 //自己琢磨吧,这里写不下了 5 8 //规律可以看出来了f[n] = f[n-1] + f[n-2] //这里肯定会有递归算法了 function getWays(n){ if(n == 1){ return 1 }else if(n == 2){ return 2 }else{ //递归调用 return getWays(n-1) = getWays(n-2) } } 6.结果输出什么?为什么? var a={}, b={key:'b'}, c={key:'c'}; a[b]=123; a[c]=456; console.log(a[b]); 解题思路: 首先这题得知道,object的属性值是不是可以为object?当然是不可以的。 因为键名称只能是字符串,b/c单作建会调用toString得到的都是[object Object],a[b],a[c]都等价于a["[object Object]"],那不就是更新[object Object]这个键的值了,执行后查看下a对象的的属性值就会发现确实是这样。
转载于:https://www.cnblogs.com/mdengcc/p/6510323.html