ES5-严格模式

除了正常运行模式,ES5添加了第二种运行模式:"严格模式"(strict mode)。

目的

  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为
  • 消除代码运行的一些不安全之处,为代码的安全运行保驾护航
  • 为未来新版本的Javascript做好铺垫

使用

  • 针对整个脚本文件:将use strict放在脚本文件的第一行,则整个脚本文件将以严格模式运行。

  • 针对单个函数:将use strict放在函数体的第一行,则整个函数以严格模式运行。

    如果浏览器不支持,则这句话只解析为一条简单的语句, 没有任何副作用。

  • 脚本文件的变通写法:因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中。

    (function (){
      "use strict";
         // code
       })();
    
    

语法和行为改变

  • 必须用var声明变量

    在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

  • 静态绑定

    1.创建eval作用域--正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

    2.禁止使用with语句--因为with语句无法在编译时就确定,属性到底归属哪个对象。

  • 禁止自定义的函数中的this指向window,禁止在函数内部遍历调用栈

    使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

  • 对象不能有重名的属性,函数不能有重名的参数

    • 正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

    • 正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

      参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近在看一些框架源代码的时候看见好多都在代码开头用了“use strict”,自己不是很了解,就查阅相关资料学习了...
    云梦之浦阅读 5,531评论 0 0
  • 最近在看一些框架源代码的时候看见好多都在代码开头用了“use strict”,自己不是很了解,就查阅相关资料学习了...
    一梦欧巴阅读 2,865评论 0 0
  • 理解: 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(strict mode)。 顾名思...
    牛耀阅读 1,118评论 0 0
  • 我家有个青春期的女儿,从小活泼开朗兴趣广泛,我一直窃喜自己没经历过的都让孩子经历了,自己小时候没条件上的兴趣...
    竹子_ac56阅读 2,738评论 0 5
  • 当我们感叹自己老了,所数指的是皮相。 我相貌平庸,路人而已,红颜易老之叹还轮不到我来。对于相貌真的很少留心。 偶尔...
    辋水沦涟阅读 1,826评论 0 4