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