1.如何理解闭包
- 定义和用法:
当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返 回的这个函数在外部被执行,就产生了闭包。 - 表现形式
使函数外部能够调用函数内部定义的变量。 - 变量的作用域
要理解闭包,首先必须理解Javascript特殊的变量作用域。
变量的作用域分类:全局变量和局部变量。
特点:
1、函数内部可以读取函数外部的全局变量;在函数外部无法读取函数内的局部变量。
2、函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! - 使用闭包的注意点
1)滥用闭包,会造成内存泄漏:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)会改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
浅谈对闭包的理解
2.如何做性能优化
- html语义化
- 减少重复代码,压缩css,js代码大小
- 背景图片大小及数量
- 减少http请求,合理设置缓存
- 图片懒加载(lazyout images)
- 减少cookie传输
- js中减少DOM操作,避免使用eval和 Function,减少作用域链查找(尽量把变量设为局部变量)。
- CDN加速
- 反向代理
web前端性能优化总结
3.如何发起ajax请求
(1)创建异步对象。即 XMLHttpRequest 对象。
(2)设置请求的参数。包括:请求的方法、请求的url。
(3)发送请求。
(4)注册事件。 onreadystatechange事件,状态改变时就会调用。
如果要在数据完整请求回来的时候才调用,我们需要手动写一些判断的逻辑。
(5)获取返回的数据。
使用Ajax发送http请求(get&post请求)
4.Jquery中的$(this)和JS中的this的差别
$(this)是Jquery中的对象,而this是html中的元素
$(“this”)是使用标签选择器,查找名为this的标签
$(this)取出当前对象并转换为jQuery对象,用jquery封装的当前对象
this表示的是javascript提供的当前对象,可以直接用this.style修改样式
5.跨域
6.JSON和JSONP的区别
JSON是一种基于文本的数据交换格式,用于描述复杂的数据
JSONP就是一个跨域交互协议,可以理解为,JSONP约定了JSON的这个数据怎样进行传递。
7.浏览器是如何渲染页面
1、处理HTML标记并构建DOM树
2、处理CSS标记并构建CSSOM树
3、将DOM与CSSOM合并成一个渲染树
4、根据渲染树来布局,以计算每个节点的集合信息
5、将各个节点绘制到屏幕
前端进阶——浏览器页面渲染过程