1.编写一个javascript函数fn,该函数有一个参数n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的数组,且整数取值范围为[2,32];
2.获取10-100的10个数字将其排序
3.不同时候函数调用后所输出的值
4.用递归计算1-100的和
5.实现一个log函数,调用原生的console.log实现,要求每条信息追加个前缀(SF),并美化一下输入用空格隔开接收日志,并能兼容所有的游览器,例如
log("hello")//=》(sf)hello
5.1接上题,log函数的第二个参数,接收类型参数(默认为"log"),分别调用console的warn方法进行输出,例如:
log("log")//==>(SF)log
log("log","warn")//==>(SF)log //这条信息时调用console.warn输出
6.下面这个ul如何点击每一列的时候alert其index?
<ul id='test'>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
7.理解this
8.实现一个函数clone,可以对js的5中数据类型进行值复制
9.function foo(){
getName = function(){alert(1)};
return this;
}
foo.getName = function(){alert(2);}
foo.prototype.getName = function(){alert(3)};
var getName = function (){alert(4)};
function getName(){alert(5)};
foo.getName();
getName();
new foo.getName();
new foo().getName();
new new foo().getName();
foo().getName();
getName();
//查看输出
1.编写一个javascript函数fn,该函数有一个参数n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的数组,且整数取值范围为[2,32];
1 <script> 2 function fn(n){ 3 var arr = []; 4 if(n&&(typeof(n)=="number"?true:(parseInt(n)?true:felse))){//判断n是否存在,n是否是number类型,n是否可以装换为数字 5 for(var i = 0;i<n;i++){ 6 if(i>30) return arr;//如果n大于了取值范围将会死循环,因为要不重复 7 var newNum = Math.ceil((Math.random()*30)+2);//2-32(随机数是[0,1)); 8 if(arr.indexOf(newNum)<0)//判断获取到的数字数组中是否存在,存在则i--重新来过,否则个数组赋值 9 arr[i]=newNum 10 else i--; 11 } 12 } 13 return arr; 14 } 15 console.log(fn(5)); 16 </script>
2.获取10-100的10个数字将其排序
1 function cc() { 2 var a = []; 3 for (var i = 0; i < 10; i++) { 4 a[i] = parseInt(Math.random() * 90+10); 5 } 6 a.sort(function (c, b) { 7 return c - b; 8 }) 9 console.log(a); 10 } 11 cc();
3.不同时候函数调用后所输出的值
1 var fn = null; 2 function foo() { 3 var a = 2; 4 var fee = function () { 5 console.log(a); 6 } 7 fn = fee; 8 } 9 function fcc() { 10 fn(); 11 } 12 foo();//空 (我以为执行foo的时候可以执行到fee(),得到的结果为2,而fee是需要调用才能执行的,而foo函数没有返回就不会显示结果) 13 fcc();//2 (在foo执行时,将fee赋值给了全局变量,所以在执行fcc()的时候就可以调用到fee()而打印结果2)
4.用递归计算1-100的和
1 var sum = 0; 2 //递归实现1-100的加 3 function addNum(j) { 4 if (j > 0) { 5 sum +=j; 6 j--; 7 addNum(j); 8 } else { 9 alert(sum) 10 } 11 } 12 addNum(100);
5.实现一个log函数,调用原生的console.log实现,要求每条信息追加个前缀(SF),并美化一下输入用空格隔开接收日志,并能兼容所有的游览器,例如
log("hello")//=》(sf)hello
1 function log() { 2 var arr = []; 3 for (var i = 0; i < arguments.length; i++) { 4 arr.push("(SF) " + arguments[i]); 5 } 6 console.log.apply(console, arr); 7 } 8 log("hello");
5.1接上题,log函数的第二个参数,接收类型参数(默认为"log"),分别调用console的warn方法进行输出,例如:
log("log")//==>(SF)log
log("log","warn")//==>(SF)log //这条信息时调用console.warn输出
1 function log() { 2 var arr = []; 3 4 for (var i = 0; i < arguments.length; i++) { 5 var re = /^warn$/; 6 if (re.test(arguments[i])) { 7 continue; 8 } 9 arr.push("(SF) " + arguments[i]); 10 } 11 if (arr.length == arguments.length) { 12 console.log.apply(console, arr); 13 } else { 14 console.warn.apply(console, arr); 15 } 16 17 } 18 log("hello", "warn"); 19 log("hello");
6.下面这个ul如何点击每一列的时候alert其index?
<ul id='test'>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
1 var ul = document.getElementById('test'); 2 var lis = ul.getElementsByTagName('li'); 3 ul.addEventListener('click',function (e) { 4 e = e ||window.event; 5 var tag = e.target||e.srcElement; 6 alert([].indexOf.call(lis,tag)+1); 7 });
7.对this的理解
1 var User = { 2 count:1, 3 getCount:function(){ 4 return this.count; 5 } 6 } 7 console.log(User.getCount());//这里打印的是1 8 var fun = User.getCount; 9 console.log(fun());//这里是undefined (因为var fun = User.getCount;时getCount中的this变为全局的了)
8.实现一个函数clone,可以对js的5中数据类型进行值复制(undefined,string,number,object,boolent)
1 function clone(val){ 2 var newV; 3 if(val instanceof Array){ 4 newV = []; 5 //newV = val.concat(); 6 var i = val.length; 7 while(i--){ 8 newV[i] = clone(val[i]); 9 } 10 }else if(val instanceof Object){ 11 newV = {}; 12 for(var v in val){ 13 newV[v] = clone(val[v]); 14 } 15 }else{ 16 //这里会返回Number,String,Boolean,undefined 17 return val; 18 } 19 return val; 20 }
9.输出解释
1 function foo(){ 2 getName = function(){alert(1)};//1 3 return this; 4 } 5 foo.getName = function(){alert(2);}//2 6 foo.prototype.getName = function(){alert(3)};//3 7 var getName = function (){alert(4)};//4 8 function getName(){alert(5)};//5 9 10 foo.getName();//输出的是第2个-----2 11 getName();//输出的是第4个,赋值的优先级很低,会最后赋值,4、5同时定义了getName,4会覆盖5-----4 12 new foo.getName();//输出第2个 "."的优先级高于"new" foo.getName()将会执行第2个,new 时会将执行第1个,第一个的getName变为全局变量-----2 13 new foo().getName();//输出第3个 "new foo()"的优先级高于"."-----3 14 new new foo().getName();//输出第3个 先"new foo()"再"new foo().getName()"再"new new foo().getName()"-----3 15 foo().getName();//输出第一个-----1 16 getName();//输出变为全局变量的第一个-----1