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