实现一个打点计时器:(从start到end每隔100毫秒console.log一个数字,增幅为1,返回对象包涵一个cancel方法用于定时操作,第一个需立即输出)
function count (start,end) function count(start, end)
{ {
console.log(start); if(start<=end){
var a = setInterval(function (){ console.log(start);
if(start<end){ start++;
start+=1; var t= setTimeout( function (){
console.log(start);} count(start,end)
},100) },100)}
return { cancel:function() return { cancel:function ()
{ {
clearInterval(a); clearTimeout(t);
} }
} }
} }
实现函数 makeClosures,调用之后满足如下:1、返回一个函数数组 result,长度与 arr 相同 2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同。
第一种:
function makeClosures(arr, fn) {
var result = [];
arr.forEach(function(e){
result.push(function(num){
return function(){ //如果在循环中直接写result[i] = function(){return fn(arr[i]);}
return fn(num); //或者result.push(function(){return fn(arr[i]);}),那样出错
}; //只是创建了一个函数体为“return fn(arr[i]);”的函数对象而已
}(e)); //需要声明一个匿名函数,并立即执行它。函数执行后,
}); //i立即传入并被内部函数访问到,闭包允许你引用存在于外部函数中的变量。
return result;
}
第二种:
function makeClosures(arr, fn) {
return arr.map(function(item){
return fn.bind(this,item);
});
}
[编程题]二进制转换:获取数字 num 二进制形式第 bit 位的值。注意:
1、bit 从 1 开始
2、返回 0 或 1
3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1
例子: 输入:128,8 输出:1
第一种:
function valueAtBit(num, bit) {
var s = num.toString(2);
return s[s.length - bit];
}
第二种:
function valueAtBit(num, bit) {
//toString转化为二进制,split将二进制转化为数组,reverse()将数组颠倒顺序
var arr = num.toString(2).split("").reverse();
return arr[bit-1];
}
给定二进制字符串,将其换算成对应的十进制数字
输入:'11000000' 输出:192
function base10(str) {
/**
parseInt(str,2)
parseInt(str,8)
parseInt(str,16)
*/
return parseInt(str,2);
}
查找重复元素:输入:[1, 2, 4, 4, 3, 3, 1, 5, 3] ; 输出:[1, 3,4]
function duplicates(arr) {
var a=arr.sort(),b=[];
for(var i in a){
if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]);
}
return b;
}//先排序,如果后一个与前一个相等且未保存,则保存。
给定字符串 str,检查其是否包含 连续3个数字 。输入:'9876543';输出:"987"
1、如果包含,返回最新出现的 3 个数字的字符串
2、如果不包含,返回 false