什么是: 比旧的js运行机制要求更严格新运行机制
为什么: 旧的js中有很多广受诟病的缺陷
何时: 今后,企业中,所有代码都要运行在严格模式下。框架中默认就是严格模式
如何: 在当前代码段的顶部添加: "use strict";
新规定: 4个:
1.禁止给未声明过的变量赋值:
1.1旧的js中:
如果强行给未声明过的变量赋值,不会报错,而是,自动在全局设置该变量。——全局污染
1.2严格模式中:
强行给未声明过的变量赋值,会报错!——减少了因为写错变量名造成的全局污染!
2.静默失败升级为错误:
2.1静默失败:
程序运行不成功,但是也不报错。——极其不利于调试程序。
2.2严格模式:
将绝大部分静默失败都升级为报错!
3.普通函数调用中的this不再指window,而是指undefined
3.1旧js中:
普通函数调用中的this默认指window——极容易造成全局污染。
3.2严格模式:
普通函数调用中的this指undefined了,不再指window——防止因为错误使用this而导致的全局污染
4.禁用了arguments.callee
4.1什么是arguments.callee:
是在一个函数内,获得当前函数本身的一种特殊关键字。——递归
4.2递归的问题1:
在函数内写死了当前函数名,一旦外部函数名改变,内部函数名忘记修改,则程序立刻报错!——紧耦合
4.3解决:
在函数内使用arguments.callee代替写死的函数名。在运行时,自动获得当前函数本身!——松耦合
4.4递归的问题2: 重复计算量太大: 递归效率极低
4.5解决:
今后,如果递归调用却是严重影响程序的性能时,就要用循环来代替递归。——难度极高
| 总结: |
|---|
| 如果递归调用没有影响程序的效率,就首选递归——简单,直观 |
| 如果递归调用却是影响了程序的效率,则被迫改为循环实现——难度极高. |