- 最近在看一些框架源代码的时候看见好多都在代码开头用了“use strict”,自己不是很了解,就查阅相关资料学习了一下,做了一下笔记。
-
严格模式就是让javascript在更严格的条件下运行。
-
其目的有以下几个:
1. 消除javascript语法的不严谨和一些不合理之处,减少一些怪异行为。 2. 消除代码运行的不安全之处,保证代码的运行安全。 3. 提高编译器的效率,增加编译速度。 4. 为未来新版本的javascript做好铺垫。
-
同样的代码在严格模式下可能会有不一样的运行结果,一些在正常模式下可以运行的代码语句,在严格模式下可能将不能运行,掌握这些内容将有助于更细致深入的了解javascript,提升代码水平。
-
进入标志就是 "use strict";老版本那些不支持的浏览器会把他当做一串普通的字符串处理。
-
有两种调用方法:
1. 针对整个脚本文件,放在脚本文件的第一行。 2. 针对单个函数,将"use strict"放在函数体的第一行,则整个函数以“严格模式”运行。 3. 由于第一种方法不利于文件合并,所以更好的做法是借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数当中。
(function () { "use strict"; // some code here })
-
严格模式对javascript的语法和行为都做了一些改变:
1. 全局变量要显示的声明,否则会报错;必须先声明变量然后再使用。 2. 静态绑定: a):禁止使用with语句 b):正常模式下javascript语言有两种作用域(scope),即全局作用域和函数作用域。严格模式创建了第三种作用域,eval作用域。正常模式下,eval语句的作用域取决于它本身是处在全局作用域还是函数作用域。严格模式下eval本身就是一个作用域,不在能够生成全局变量了,他所生成的变量只能用于自身内部。
-
增强的安全措施:
1. 禁止this关键字指向全局对象。 2. 禁止在函数内部遍历调用栈。 ``` function f1(){ " use strict"; f1.caller; //报错 f1.arguments; //报错 } ```
-
禁止删除变量:严格模式下将不能删除变量,只有configurable设置为true的才能删除。
-
显式报错
-
重名错误:
1. 对象不能有重名的属性 2. 函数不能有重名的函数
-
禁止八进制表示法
-
arguments的限制:
1.不允许对arguments进行赋值。 2. 不再追踪参数的变化。 3. 禁止使用arguments.callee,无法在匿名函数内部调用自身了
-
函数必须声明在顶层
-
增加了一些保留字,用这些保留字命名变量将会报错
es5严格模式(“use strict”)学习笔记
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。...
- 一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。...
- 严格模式 1、设立严格模式的目的 消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;(会将J...