严格模式的语法
1.在执行代码前面输入以下代码
' use strict'
2.严格模式和普通模式的一些区别
(1).变量的使用必须先声明才能使用
(2).不能随意删除已经声明好的变量
(3).全局作用域下的this 是 空值
(4).构造函数不加 new 调用 this 会为空,赋值会报错
(5).定时器下的 this 没有变化 还是指向 window
(6).函数不能有重名的参数
(7).不允许在非函数的代码块内声明函数 (只允许在函数里面声明另一个函数)
2.闭包
语法定义: 闭包是指有权访问另一个函数作用域中变量的
函数.------JavaScript高级程序设计
主要作用: 延申了变量的作用范围
(1). 函数内部可以使用全部变量
(2).函数外部不可以使用局部变量
(3).当函数执行完毕,本作用域内的局部变量会销毁.
(4).立即执行函数被称为一种小闭包
(5).因为闭包存在的变量(不是函数里面的)在程序运行完成后是不会被销毁的
这就是内存泄漏,开辟大量无意义的内存空间.
3.递归
定义: 一个函数在内部可以调用本身的,这个函数就是递归函数
容易法生 “栈溢出” 的错误 一定要加退出条件 return
基本是和循环一样的
(1).在递归里,每一次自己调用自己,都要返回值给自己,不停的返回给自己;但是这样会
形成" 栈溢出",所以给一个if判断,当达到某种条件的时候,就不再返回了
(2)递归函数的一些基本应用 : (1)求 1-n 的阶乘 (2)求兔子数列
(3)可以获取更深层的数据;比如一个对象里面有两个方法,其中一个方法里面又包含
一个对象;那么就可以获取这个方法里的对象里的数据; 本质就是调用同一个函数
改变传入的参数,来达到目的; 还有就是把获取到的数据赋给一个空对象,再返回这个
空对象;
如:
4. 拷贝
(1)浅拷贝只是拷贝一层,更深层对象级别的拷贝只是拷贝地址
如果原地址改变了,拷贝后的的对象也会发生改变
(2)深拷贝是拷贝多层, 每一层级别的数据都会拷贝
就算原目标改变了,拷贝后的对象也不会发生改变
语法: (1),简单的语法:运用for( var k in obj) {
k 是属性名 obj[k] 是属性值
}
(2).ES6 新增的语法糖
语法:(1).浅拷贝 assig
针对深拷贝,需要使用其他办法,因为
```javascript
Object.assign()拷贝的是属性值。假如源对象的属性值是
一个对象的引用,那么它也只指向那个引用。
Object.assign(o,obj);
这个方法也可以用来合并多个对象
o是拷贝后对象
obj 拷贝目标
***总结:*** 深拷贝和浅拷贝地区别是: 在拷贝复杂数据
类型的时候,浅拷贝只是引用,而深拷贝是重新赋值一次
*****注意:*** 在默认情况下,深浅拷贝并没有太大的区别
只有在遇见对象类的数据才会出问题
这是一种比较垃圾的一种深拷贝的方法:
原理就是利用获取属性和属性值的方法 再利用递归的深层获取数据
来达到深拷贝的目的