zoukankan      html  css  js  c++  java
  • JS在严格模式和非严格模式的区别

    若想在严格模式下使用JS,需要在文件的第一行加上“use strict”,在实际开发中,常常将“use strict”加入到闭包的内部

    具体是:

    • 整个脚本中使用:在这个JavaScript文件开头写'use strict'; 在闭包内部中使用 funtion () { 'use strict'; }
    • 严格模式下,不允许使用with
    with语句 扩展一个语句的作用域链。
    with (expression) {
        statement
    }
    • 严格模式下,不允许给未声明的变量赋值
    • 严格模式下,arguments与参数不存在映射关系
    function(h) {
        arguments[0] = 100;
        console.log(h);  //100
    }(1);
    
    function(h) {
        'use strict';
        arguments[0] = 100;
        console.log(h);  //1
    }(1);
    但是,但参数是对象时,是存在映射关系的:
    function(h) {
        'use strict';
    console.log(h.a);//1 arguments[0].a = 100; console.log(h.a); //100 }({a:1});
    • 严格模式下,删除参数名,函数名报错。非严格模式返回false,不报错也没有任何效果
    function(h) {
        console.log(h);  //1
        console.log(delete h);  //false
        console.log(a);  //1
    }(1);
    
    function(h) {
        'use strict';
        console.log(h);  //1
        delete h;  //SyntaxError(语法错误)
        console.log(h);  //1
    }(1)
    • 严格模式下,函数参数名重复报错。非严格模式最后一个重名参数会覆盖之前的重名参数。
    function (a, a, b) {
        console.log(a + b);  //5
    }(1, 2, 3);
    
    !function (a, a, b) {
        'use strict';
        console.log(a + b);  //SyntaxError
    }(1, 2, 3);
    • 严格模式下,删除不可配置(configurable=false)的属性报错。非严格模式返回false,不报错也没有任何效果
    function (a){
        var obj={};
        Object.defineProperty(obj,'a',{ configurable: false });
        console.log(delete obj.a); //flase
    }(1);  
            
    !function (a){
        'use strict';
        var obj={};
        Object.defineProperty(obj, 'a', { configurable: false });
        console.log(delete obj.a); //TypeError
    }(1);
    • 严格模式下,修改不可写(writable=false)的属性报错
    unction () {
        var obj = { a: 1 };
        Object.defineProperty(obj, 'a', { writable: false });
        obj.a = 2;
        console.log(obj.a);  //1  //证明没有被修改
    }();
    
    !function () {
        'use strict';
        var obj = { a: 1 };
        Object.defineProperty(obj, 'a', {writable: false});
        obj.a = 2;  //TypeError
    }();
    • 严格模式下,一般函数调用,this指向undefined,而不是全局对象
    function () {
        function fun() { return this; }
        console.log( fun() );  //Window
    }();
    
    !function () {
        'use strict';
        function fun() { return this; }
        console.log( fun() );  //undefined
    }();
    • 严格模式下,不再支持arguments.callee/caller
  • 相关阅读:
    (转)大型网站架构演变和知识体系
    最小生成树-Prim算法和Kruskal算法
    最短路径——Floyd-Warshall算法
    SpringBootService,一个基于spring boot搭建的SOA服务框架
    Netty(六)UDP在netty中的使用
    Netty(五)序列化protobuf在netty中的使用
    Netty(四)分隔符与定长解码器的使用
    Netty(三)TCP粘包拆包处理
    Netty(二)入门
    Netty(一)引题
  • 原文地址:https://www.cnblogs.com/yuan233/p/10300887.html
Copyright © 2011-2022 走看看