2、函数(第6章 函数)
- 闭包:
闭包就是一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会增加内存消耗。
或者说闭包就是子函数可以使用父函数的局部变量,还有父函数的参数。
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
function outerFunction() {
var counter = 0;
function innerFunction(){
return counter += 1;
}
return innerFunction;
/*
注意 typeof innerFunction 是:function;而typeof innerFunction()是number;
*/
}
var add = outerFunction();
- arguments对象 arguments[0]
function f(x,y,z) 判断数量是否相等
if(f.length!=arguments.length)
可以用来实现函数重载
-
一个特殊的调用对象属性“this”总是引用函数的所有者
-
call()和apply()方法的第一个参数都是要调用函数的对象,用call()和apply()调用函数时,函数内的this属性总是引用这个参数。call()的剩余参数是传递给要调用的函数的值,它们的数量可以是任意的.apply()方法和call()方法类似,只不过它只接受两个参数,除了调用者之外,它的第二个参数是一个带下标的集合(比如数组,但也可以不是数据),apply()方法把这个集合中的元素作为参数传递给调用的函数。
3、对象(第七章)
- JavaScript规定,实例的constructor的值总是对构造函数即对象类本身的引用。这是一个很有用的属性,因为它从概念上而言就是对象实例所属的对象类,在具有继承关系的对象中,它总是指向当前类本身,因此常用它来进行准确的运行时类型识别
-
JavaScript中,要销毁一个对象,必须要消除一个对象所有的外部引用。JavaScript的存储单元回收机制采取的是引用计数法,具体来说就是当一个对象被创建,并且它的引用被存储在变量中,引用计数就为1,当它的引用被复制,并且存储在另一个变量中,引用计数就增加1,当保存这个引用的其中一个变量被某个新值覆盖了时,引用计数就减少1,以此类推。当一个对象的引用计数被减少为0时,它才会被销毁。
4、数组
- 删除元素
delete操作虽然能够删除数组元素,但它并不会改变数组的length属性,因此如果要删除数组某个下标值之后的元素,应当直接修改length的值,而不是用delete运算。
Array原型的push0和pop0方法将数组看作是一种堆栈类型的数据结构。这种数据结构的特点是“后进先田”,使用push0方法可以在数组的末尾插入一个或多个元素,而使用pop0万法可以依次弹田它们。
基本的正则表达式?
表单校验代码?
https://www.cnblogs.com/liugang-vip/p/5616484.html
margin塌陷
父子元素,margin粘到一起,相对于上一层元素一起动,margin取大的 给父级触发bfc
兄弟元素,中间的margin取较大的 每一个拿div包起来,再每个新的div触发bfc,这个不解决,知道就好
解决,触发bfc,position:absolute; / display:inline-block /float:left/right /overflow:hidden;
浮动元素产生了浮动流所有产生了浮动流的元素,块级元素看不到他们产生了bfc的元素和文本类属性(inline)的元素以及文本都能看到浮动元素
1.给他后面加个元素,如下面的p,属性clear:both;就可以
清楚浮动完美解决方法:但上面会改变结构,伪元素天生行级,让他是block,并且clear:both,清楚浮动
让父级也产生付浮动流
但
一个知识点:设置为display:absolute和float之后 ,会变为inline-block;