需要写代码实践的题

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
原文地址:https://www.cnblogs.com/sunnie-cc/p/6514012.html