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>
时间: 2024-09-27 01:55:23

JavaScript学习笔记6 之经典神坑题整理的相关文章

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

Java程序猿的JavaScript学习笔记(1——理念)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

javascript学习笔记---ECMAScriptECMAScript 对象----修改对象

通过使用 ECMAScript,不仅可以创建对象,还可以修改已有对象的行为. prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法. 创建新方法 通过已有的方法创建新方法Number.prototype.toHexString = function() { return this.toString(16); }; 在此环境中,关键字 this 指向 Number 的实例,因此可完全访问 Number 的所有方法.有了这段代码,可实现下面的操作: var iNu

javascript学习笔记——如何修改&lt;a href=&quot;#&quot;&gt;url name&lt;/a&gt;

0.前言 使用了一段时间javascript,再花了点时间学习了jquery,但是总是感觉自己很"迷糊",例如<a href="#">url name</a>中,如果修改href中的"#"应如何编写代码,如果修改url name应如何编写代码.再加上javascript和jquery操作方法略有不同,所以我就更"迷糊"了. [说明] 曾经使用关键词--"innerHTML和value区别&qu

javascript学习笔记---ECMAScript语法(辅助)

1.区分大小写. test与Test变量是两个不同的变量 2.变量是弱变量. 与C,java等等语言变量不是很一样. 如下java代码 ? 1 2 3 4 int i =0; //再次赋值 i = 10;//ok i = "hello";//wrong 类型不匹配 javascript ? 1 2 3 4 var i = 9; //再次赋值 i = 10;//ok i = "hello";//ok 但是不建议这么干,如此会给开发造成干扰,不明确变量的类型.(变量命名

javascript学习笔记---ECMAScript语法(变量)

变量声明关键字var: var i = 1: var t = "asd"; var test1 = "hi", test2 = "hello"; 声明变量不一定要初始化, var i;//ok 另一方面在使用变量前若未加关键字var,则此变量为全局变量(此特性需特别记住). 变量名字: 变量名需要遵守两条简单的规则: 第一个字符必须是字母.下划线(_)或美元符号($) 余下的字符可以是下划线.美元符号或任何字母或数字字符 命名变量规则: Came