《十八》JS 中的严格模式
创始人
2025-05-28 23:10:23

JS 不断向前发展并且没有带来任何兼容性的问题。新的特征被加入,旧的功能也没有改变,这么做有利于兼容旧代码;但是 JS 创造者的任何错误或者不完善的决定也将永远被保留在 JS 这门语言中。

在 ES5 标准中,JS 提出了严格模式(Strict Mode)的概念。严格模式是一种具有限制性的 JS 模式,从而使代码隐式地脱离了懒散模式(Sloppy Mode)。

支持严格模式的浏览器在检测到代码中开启了严格模式后,会以严格的方式对代码进行检测和执行。

开启严格模式:

严格模式通过在文件或者函数的开头使用 "use strict" 来开启。可以对整个文件开启严格模式,也可以单独对某个函数开启严格模式。

ES6 中的 class 和 module 默认开启了严格模式。
打包后的代码一般都默认开启了严格模式。

严格模式对代码的限制:

  1. 严格模式下不会创建意外的全局变量。
    "use strict"
    function fn() {message = 'Hello' // 非严格模式下,不使用 var 声明的变量会被创建为全局变量;严格模式下,不使用 var 声明的变量不会被创建为全局变量
    }
    fn()
    console.log(message) // 非严格模式下能成功访问;严格模式下访问报错:Uncaught ReferenceError: message is not defined
    
  2. 严格模式下会将静默错误明确抛出。
    "use strict"var obj = {message: 'Hello World'}Object.defineProperty(obj, 'message', {writable: false // 配置为不可修改})obj.message = 'Hello JS'  // 非严格模式下修改不会抛出任何错误;严格模式下修改报错:Uncaught TypeError: Cannot assign to read only property 'message' of object '#'
     
  3. 严格模式下不允许函数的参数名称相同。
  4. 严格模式下不允许 0 开头的八进制语法。

    0o 开头可以,0 开头不可以。

  5. 严格模式下不允许使用 with。
  6. 严格模式下 eval() 函数里创建的变量,外层引用不到。
    "use strict"
    eval(`var message = 'Hello'`)
    console.log(message) //  非严格模式下 eval 函数里创建的变量,外部也可以引用到;严格模式下报错:Uncaught ReferenceError: message is not defined
    
  7. 严格模式下 this 绑定不会默认转成对象。

    全局的 this 不会被转成 window,而是 undefined;函数内部的 this 也不会被默认转成对象。

    function fn1() {console.log(this)
    }
    fn1.apply('abc')function fn2() {"use strict"console.log(this)
    }
    fn2.apply('abc')
    
    请添加图片描述
  8. 相关内容

    热门资讯

    匈奴人长什么样子?境外考古还原... 匈奴人长什么样子?不清楚的读者可以和趣历史小编一起看下去。这是一个长期以来困扰中国人和欧洲人的大问题...
    安徽汽车职业技术学院最新或20... 我院毕业生具有理论知识扎实、技能突出等优势,主要在江汽集团公司及安徽省大中型企事业单位就业。第四章 ...
    邯郸之战秦国为什么会输呢 只因... 今天趣历史小编给大家准备了:邯郸之战的文章,感兴趣的小伙伴们快来看看吧!长平之战后,秦国已经战胜当时...
    为什么秦国会被称为虎狼之师 而... 今天趣历史小编给大家准备了:秦国虎狼之师的文章,感兴趣的小伙伴们快来看看吧!说到我国历史上的战国时期...
    秦国书同文车同轨 秦国之前的文... 还不知道:七国文字的读者,下面趣历史小编就为大家带来详细介绍,接着往下看吧~秦国的统一,不仅仅是地域...