JavaScript学习笔记6 之经典神坑题整理
本篇内容是关于容易出错题的整理,这些题也有利于对javascript的语法逻辑的理解,分析的内容仅供参考:
1 <script> 2 /*1*/ 3 var x=0 , y=0 , c=1; 4 function add(n) {n=n+1;} 5 x=add(c); 6 alert(x);//4 7 function add(n) {n=n+3; return n;} 8 y=add(c); 9 alert(y);//4 10 11 //执行过程 12 var x;//变量和函数都提前声明 13 var y; 14 var c; 15 // function add(n) {n=n+1;}//被覆盖,不会调用此函数 16 function add(n) {n=n+3; return n;}//函数名相同的函数都提前声明,后面的覆盖前面的 17 x=0; 18 y=0; 19 c=1; 20 x=add(c);//4 c作为形参传入函数, 21 alert(x);//4 22 y=add(c);//4 23 alert(y);//4 24 25 26 /*2*/ 27 28 var i=5,k,x; 29 k=++i;//先加后赋值 30 i=i++;//先赋值给i再+1,此时被赋值的i为6,复制后自+1 31 alert(k);//6 32 alert(i);//6 33 34 35 36 /*3、逗号操作符 */ 37 //逗号操作符中有多条语句时,执行后面语句 38 if (1,0) {//返回0 39 alert('123'); 40 } else{ 41 alert('abc'); 42 };//abc 43 44 if (0,-2) {//返回-2 45 alert('123'); 46 } else{ 47 alert('abc'); 48 };//123 49 50 51 var k=0; 52 for(var i=0, v=0; i<9, v<6; i++, v++){//返回v<6 53 k = i + v; 54 } 55 alert(k);//10 56 57 var k=0; 58 for(var i=0, v=0; i<6, v<9; i++, v++){//返回v<9 59 k = i + v; 60 } 61 alert(k);//16 62 63 64 /*4、异步事件*/ 65 for (var i = 0; i < 5; i++) { 66 setTimeout(function (){//异步代码 67 console.log(i);//打印 5个5 68 },0); 69 }; 70 71 72 for (var i = 0; i < 5; i++) { 73 74 }; 75 setTimeout(function (){//异步代码 76 console.log(i);//打印1个5 77 },0); 78 79 80 function fn(){ 81 console.log('first' ); 82 setTimeout(function (){//同步代码执行完之后才执行异步代码 83 console.log( 'second' ); 84 },0); 85 } 86 for (var i= 0; i < 5; i++) { 87 fn(); 88 } 89 //first first first first first second second second second second 90 //前5个first是for循环执行5次打印事件 91 //后5个second是for循环执行5次,分别将异步事件分5次放在队列里面,最后执行异步事件 92 93 /*5、计时器是异步事件后执行问题*/ 94 var t = true,x = 5;//执行1 95 setTimeout(function (){//执行4、计时器进入异步队列,先不执行,最后执行。 96 t = false; 97 alert(x); 98 x = 6; 99 },300); 100 while (t){ x = 8; }//执行2-->此处陷入死循环 101 alert(x);//执行3 102 //死循环 103 </script>