js进阶部分

闭包

定义:我们知道外部无法访问内部的变量以及函数,如果我们外部能够访问内部函数中的函数,那么我们称这个称内部函数中的函数为闭包。

闭包形成原因

我么通常知道当我们函数执行完毕后,其中的局部变量将进行销毁,但是如果局部变量因为外部引起而导致没有被销毁,因此就形成了闭包

为什么滥用闭包会导致内存泄漏

一般情况下我们函数执行完了,其中的局部变量将会被垃圾回收机制进行回收,但是当你调用了闭包,那其对应引用的局部变量将不会被销毁,,所以滥用的话会导致局部变量存在内存中越来越多,可能导致内存泄漏

闭包的作用

1.封装私有化变量(私有化属性)
2.模仿块级作用域(ie6以前没有块级作用域的说法)
3.实现js的模块(封装库方便调用)

深拷贝和浅拷贝

浅拷贝

定义:我们将一个对象一葫芦画瓢的将其属性值复制给另外一个对象包括地址.因此当我们一个对象的属性为复杂数据类型时其中的属性发生改变时,另外一个对象也会发生改变

深拷贝

定义:我们将一个对象的属性值复制给另外一个对象,但是当到了属性值为引用数据类型的时候会重新开辟一个新的空间来存放这个属性的实体.结果与浅拷贝运行相反,不会改变

区别

深拷贝和浅拷贝最根本的区别在于是否获取一个对象的复制实体,而不是引用

严格模式

‘user strict’

好处:

1.消除javascrip语法的一些不合理,不严谨之处,减少一些怪异行为
2.消除代码运行的一些不安全之处,保证代码运行的安全
3.提高编辑器效率,提高运行速度

坏处

1.同样的代码,在严格模式下代码可能发生不一样的结果

function test(){
console.log(this);
//在严格模式下this是undefined
//在正常模式下this指向的是window
}
test()

2.一些代码在正常模式下,可以运行,但在严格模式下是错误的

function test(){
aa=123
log(aa)
//在正常模式下aa会变成全局变量,打印结果为123
//在严格模式下,会直接报错
}
test()

防抖和节流

防抖

在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,然后通过延时器来让他们过一段时间运行.防抖就是指触发事件后执行一次事件,如果n秒后又触发了事件,将重新计数函数执行事件

节流

指的是连续触发的事件但在n秒钟只执行一次,节流会稀释函数的执行频率.

你可能感兴趣的:(js,javascript,前端,开发语言)