页面优化有哪些方法
(1)多个css合并,减少HTTP请求
(2)减少DOM元素数量
(3)将JavaScript与css从页面中剥离出来
(4)移除重复脚本
(5)使用恰当的图片格式
(6)提取公共样式,减少代码量
(7)将css文件放到页面最上面
(8)避免使用css表达式
(9)选择器优化嵌套,尽量避免层级过深
call、apply、bind的异同
共同点:call、apply、Bind三者都可以改变this指向,且第一个传递的参数都是this指向的对象。都采取后续传参的形式。
不同点:call传入的参数数量不固定,第一个参数代表函数体内this指向。第二个参数开始往后,每个参数衣次被传入函数。
apply接受两个参数,第一个参数指定了函数体内this对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可以为类数组。
类数组: 1、对象本身可以存取属性;2、对象的length属性可读写。apply函数是直接执行的。
bind传递的参数是与call类型相同,并且bind函数会返回一个新的函数,并不会执行,要调用时才会执行。
什么是闭包
闭包是指一个函数可以访问另一个函数作用域中变量。
闭包简单理解就是内嵌函数,即在函数中嵌套函数。
由于在js 中,变量的作用域属于函数作用域,在函数执行后就会被销毁,内存也会收回,但是闭包是建立在一个函数内部的子函数,可以访问上级作用域,即使函数执行完,作用域也不会被销毁,这时的子函数-----也就是闭包。
缺点:无法收回闭包中引用变量,容易造成内存泄漏。
闭包的常用写法:
<script>
function bibao(){
var bibao="aaa";
return function(){
console.log(bibao);
}
}
var bag=biao();
bag();
</script>
闭包的应用:
(1)ajax请求的成功回调
(2)时间绑定的回调方法
(3)setTimeout的延时回调
(4)函数内部返回另一个匿名函数