美文网首页
JS 严格模式

JS 严格模式

作者: 弱冠而不立 | 来源:发表于2020-10-11 19:51 被阅读0次

严格模式是什么?

ES5 的严格模式是采用具有限制性JavaScript变体的一种方式,它的产生是为了形成与正常代码不同的语义。

推出严格模式的目的

  1. 严格模式通过抛出错误来消除了一些原有静默错误。
  2. 严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快。
  3. 为未来新版本 JS 做铺垫。

如何使用严格模式

1. 全局使用

<script>
    "use strict";
    function fn() {
      //xxxxxxxxxxx
    }
</script>

2. 函数局部使用

<script>
    function fn() {
        "use strict";
        //xxxx
    }
</script>

并不建议全局使用,这样不利于文件的合并,我们可以采用立即执行的匿名函数达到全局的效果,但又不污染全局

(funciton(){
  "use strict";
})();

严格模式下的一些特性

1. 在普通模式下,变量如果未声明就赋值,则默认为全局变量。而严格模式下则直接报错。即变量都需要(let/var/const)显式声明

<script>
    (function(){
        a = "a"
        console.log(a);  //===> a
    })();

    (function(){
        "use strict";
        b = "b"
        console.log(b);  //===> Uncaught ReferenceError: b is not defined
    })();
</script>

2. 严格模式下抛出一些静默的失败,例如给不可写、只读属性赋值等

<script>
    (function(){
        var obj = {
            name: "obj"
        }
        Object.freeze(obj);
        obj.name = "changeObj";
        console.log(obj.name);  //===> obj
    })();

    (function(){
        "use strict";
        var obj = {
            name: "obj"
        }
        Object.freeze(obj);
        obj.name = "changeObj";
        //===> Uncaught TypeError: Cannot assign to read only property 'name' of object '#<Object>'
        console.log(obj.name); 
    })();
</script>

3. 严格模式下 this 全局作用域下的函数默认值是 undefined

<script>
    (function() {
        console.log(this);  //===> Window
    })();

    (function() {
        "use strict";
        console.log(this);  //===> undefined
    })();
</script>
<script>
    "use strict";
    console.log(this);  //===> Window
    (function() {
        console.log(this);   //===> undefined
    })();
</script>

4. 禁止参数,对象属性重名和八进制

<script>
    (function() {
        var obj = {
            name: "obj",
            name: "obj_name"
        }
        function fn(a, b, b) {
            return { a,b }
        }
        console.log(obj); //===> {name: "obj_name"}
        console.log(fn(1,2,3));  //===> {a:1, b:3}
    })();

    (function() {
        "use strict";
        var obj = {
            name: "obj",
            name: "obj_name"
        }
        //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
        function fn(a, b, b) {
            return { a,b };
        }
        console.log(obj);  //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
        console.log(fn(1,2,3)); 
        console.log(0100);  //Uncaught SyntaxError: Octal literals are not allowed in strict mode
    })();
</script>

5. 严格模式下 具名参数是 arguments 的静态副本而非普通模式下的引用

<script>
    (function(){
        function fn(name) {
            name = "fn_name";
            console.log(name);  //===> fn_name 
            console.log(arguments[0]);    //===> fn_name
        }
        fn("name");
    })();
    (function(){
        "use strict";
        function fn(name) {
            name = "fn_name";
            console.log(name);    //===> fn_name
            console.log(arguments[0]);    //===> name
        }
        fn("name");
    })();
</script>

相关文章

  • 面向对象-严格模式、作用域

    严格模式 js有两中开发模式:非严格模式(默认)+严格模式(“ues strict”) 严格模式:会进行更严格的代...

  • 开发中的严格模式

    js中有严格模式和非严格模式两种运行环境 在开发中,有非严格模式和严格模式2种开发模式 在严格模式下,会做更加严格...

  • js 严格模式

    "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。它不是一条...

  • js:严格模式

    严格模式:js的一种运行模式,设立严格模式主要有以下几个: 1、消除js语法的一些不合理、不严谨之处,减少一些...

  • js严格模式

    1.为什么用严格模式 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; 消除代码运行的一些...

  • JS严格模式

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"。顾名思义,这种模式使得Ja...

  • JS 严格模式

    一、如何使用严格模式?可以在js文件的最开头写入,这样就会在整个js文件中使用严格模式 或者在一个函数的开头写入,...

  • js严格模式

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。...

  • js严格模式

    链接地址:http://www.cnblogs.com/xiaohuochai/p/4804903.html"us...

  • JS 严格模式

    'use strict' 是在一个严格的模式下 在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式...

网友评论

      本文标题:JS 严格模式

      本文链接:https://www.haomeiwen.com/subject/nddepktx.html