html&css&js专项练习中我的错题集
1
(function() { var a = b = 5; })(); console.log(b); console.log(a);
输出为5,Uncaught ReferenceError: a is not defined
考点:var a=b=5相当于var a=b;b=5;b前面没有var,说明是声明为全局变量。
相当于:
var b; (function() { var a=b ; b=5; })(); console.log(b); console.log(a);
在函数外,a就被销毁,所以报错
2、
var f = function g() { return 23; }; typeof g();
如果是typeof f,结果是function
如果是typeof f(),结果是number
如果是typeof g,结果是undefined.
如果是typeof g(),结果是ReferenceError,g is not defined
在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){...} (函数声明)
第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)
除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。
3、
4
5
6
7
8
9
stopPropagation() 阻止事件冒泡。 这个事件不会阻止定义在元素上的其他事件。
stopImmediatePropagation() 会彻底的阻止事件, 在其之后的绑定在元素上的其他监听事件都不会触发
preventDefault() 阻止事件的默认动作
此处click没有什么默认行为,阻止冒泡的话不是这个
10
11
3个没有回收
代码回收规则如下:
1.全局变量不会被回收。----第二行声明的i没有回收
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.只要被另外一个作用域所引用就不会被回收
----第一行的i没有被回收,第二行声明的var被忽略,但是给i赋值为2
----var add也没有回收
----闭包中的i没有被回收
12
13
- Array 对象方法方法 concat() 连接两个或更多的数组,并返回结果。
- join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
- pop() 删除并返回数组的最后一个元素
- push() 向数组的末尾添加一个或更多元素,并返回新的长度。
- reverse() 颠倒数组中元素的顺序。
- shift() 删除并返回数组的第一个元素
- slice() 从某个已有的数组返回选定的元素
- sort() 对数组的元素进行排序
- splice() 删除元素,并向数组添加新元素。
- toSource() 返回该对象的源代码。
- toString() 把数组转换为字符串,并返回结果。
- toLocaleString() 把数组转换为本地数组,并返回结果。
- unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
- valueOf() 返回数组对象的原始值
14
15
2.toString()将会优先将小数点解析为数字小数点
2..toString()因为连续的两个小数点不符合number的格式规则,第二个小数点才会被解析为调用方法
15
16
会报错
因为函数提升高于变量提升,调用函数的时候a已经不是函数