08-严格模式

72 阅读2分钟

什么是: 比旧的js运行机制要求更严格新运行机制

为什么: 旧的js中有很多广受诟病的缺陷

何时: 今后,企业中,所有代码都要运行在严格模式下。框架中默认就是严格模式

如何: 在当前代码段的顶部添加: "use strict";

新规定: 4个:

1.禁止给未声明过的变量赋值:

1.1旧的js中:

如果强行给未声明过的变量赋值,不会报错,而是,自动在全局设置该变量。——全局污染

严格3.jpg

1.2严格模式中:

强行给未声明过的变量赋值,会报错!——减少了因为写错变量名造成的全局污染!

严格4.jpg

2.静默失败升级为错误:

2.1静默失败:

程序运行不成功,但是也不报错。——极其不利于调试程序。

严格5.jpg

2.2严格模式:

将绝大部分静默失败都升级为报错!

严格6.jpg

3.普通函数调用中的this不再指window,而是指undefined

3.1旧js中:

普通函数调用中的this默认指window——极容易造成全局污染。

严格1.jpg

3.2严格模式:

普通函数调用中的this指undefined了,不再指window——防止因为错误使用this而导致的全局污染

严格2.jpg

4.禁用了arguments.callee

4.1什么是arguments.callee:

是在一个函数内,获得当前函数本身的一种特殊关键字。——递归

严格7.jpg

4.2递归的问题1:

在函数内写死了当前函数名,一旦外部函数名改变,内部函数名忘记修改,则程序立刻报错!——紧耦合

4.3解决:

在函数内使用arguments.callee代替写死的函数名。在运行时,自动获得当前函数本身!——松耦合

4.4递归的问题2: 重复计算量太大: 递归效率极低

4.5解决:

今后,如果递归调用却是严重影响程序的性能时,就要用循环来代替递归。——难度极高

严格8.jpg

总结:
如果递归调用没有影响程序的效率,就首选递归——简单,直观
如果递归调用却是影响了程序的效率,则被迫改为循环实现——难度极高.