ES5的严格模式

ES5的严格模式

为什么要设立严格模式

  1. 消除javascript语法不合理、不严谨的地方,减少一些怪异行为
  2. 保证代码运行安全
  3. 提高编译效率,增加运行速度

严格模式使用方法

  1. 全局

    “Use strtic”
    n=10;
    console.log(n);
    
  2. 局部

    function fn(){
    	“Use strtic”;
    	n=10;
    	console.log(n);
    }
    

严格模式规则

  1. 不可以省略var声明变量

    function show() {
                "use strict";
                var a = uname = "刘德华";
                console.log(uname);
            }
    

    报错: uname变量没有声明

  2. 禁止函数使用this指向全局变量

    非严格模式函数内的this指向window,严格模式下this指向undefined

    此处补充一下几种场景下this的指向
    
    1. 函数内部的this指向window,严格模式下指向undefined
    
    2. 事件绑定的this默认指向当前被绑定的元素
    
    3. this在对象的函数里默认指向当前对象
    
    4. this在箭头函数中默认指向上下文对象
    
    5. 构造函数有显式返回值且该值是对象时,this指向这个这个对象;
    
       如果返回的不是对象或者没有返回值时,this指向实例。
    
    6. 定时器内的this指向window,因为定时器方法时定义在window下的
    
  3. 禁止函数内使用八进制方法

    这个不必多说

  4. 不允许在非函数的代码块内声明函数

    “use strict"
    if (true) {
                function fn4() {
                    console.log(111)
                }
            }
    

    会报错Octal literals are not allowed in strict mode.

  5. 严格模式下arguments变量与形参不再同步

    不使用严格模式:

    function fn5(num){ 
                num=20;
                console.log(arguments[0]);
                console.log(num);
            }
             fn5(10);//20,20
    

    使用严格模式改变形参:

    function fn5(num){
                "use strict";
                num=20;
                console.log(arguments[0]);
                console.log(num);
            }
             fn5(10);//10,20
    

    使用严格模式改变arguments

    function fn5(num){
                "use strict";
    			arguments[0]=20;
                console.log(arguments[0]);
                console.log(num);
            }
             fn5(10);//20,10
    
posted @ 2021-05-18 14:32  橘子酱酱  阅读(72)  评论(0)    收藏  举报