前端笔试题

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
//1.
 console.log((function(a){}).length); //1
 console.log((function(a=5){}).length);//0
 console.log((function(a,b=5,c){}).length);//1
 console.log((function(a,b=5,c=5){}).length);//1
 //函数指定了默认值后,函数的length属性返回的就不再是函数参数个数,而是第一个指定默认值的前面参数个数。也就是说指定了默认值后,函数的length属性将失真。这是因为length属性的含义是,该函数预期传入的参数个数,某个参数指定默认值后,预期传入的参数个数就不包括这个参数及其后面的参数
//2.
 var a=undefined,b=NaN;
 console.log(a+b); //NaN
 var c=NaN,d='undefined';
 console.log(c+d); //NaNundefined
//3.
 var a = 10;b = 20;c = 4;
 console.log(++b+c+a++); //35
//4.
 console.log(null == undefined); //true
//5.
 var a=0,b=0;
 function add(a){
 add = function(b){
 alert(++a + b++);
}
 alert(a++);
 }
 add(1); //1
 add(2); //5
// 第一次执行的是外层的add,第二次执行的是内层的add(第一次执行外层add时,里面定义了全局add 覆盖了标识符),内层add函数中的a是2 ++后是3,3+2 结果5,闭包
//6.
 var a = {
 name:'json',
 sayName:function(){
 console.log(this.name);
 }
 };
 var name = 'Aaron';
 function sayName(){
 var sss = a.sayName;
 sss(); // Aaron
 a.sayName(); // json
 (a.sayName)(); // json
 (b=a.sayName)(); // Aaron
 b=a.sayName;
 b(); // Aaron
 }
 sayName();
//7.
 var reg = /^[a-zA-Z_][a-zA-Z0-9]{5,20}/,
 name1 = 'tanbayi';
 name2 = '0tanbayi';
 name3 = '你好tanbayi';
 name4 = 'hi';
 alert(reg.test(name1)); //true
 alert(reg.test(name2)); //false
 alert(reg.test(name3)); //false
 alert(reg.test(name4)); //false
//8.
 console.log(typeof(undefined)==='undefined'); //true
 console.log(typeof('1314'-0)==='number'); //true
 console.log(typeof({})==='object'); //true
 console.log(typeof(null));//object
 console.log(typeof(undefined)); //undefined
 console.log(typeof(null)==='object'); //true

//9

     var m= 1, j = k = 0; 
     function add(n) { 
         return n = n+1; 
   } 
     y = add(m); 
     function add(n) { 
        return n = n + 3; 
   } 
 z = add(m); 
y和z的最终结果为: //4,4

// js里面没有函数重载的概念,在其他语言中(如java)java中,可以存在同名函数,
// 只要传入的参数数量或者类型不同即可。在js中,定义了两个同名函数后,
// 后面的函数会覆盖前面定义的函数。结合这道题来说,由于函数声明提升,
// 所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数,
// 所以两次调用add()返回的值是相同的。也就是y,z都为4.
</script>
</body>
</html>

posted @ 2017-12-18 14:11  前端++  阅读(207)  评论(0编辑  收藏  举报