欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

严格模式

程序员文章站 2022-05-01 22:51:20
...

1.严格模式的概念和作用
除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式是的Javascript在更严格的条件下运行。

严格模式的作用:
1.消除了JS语法的一些不合理、不严谨之处,减少一些怪异行为;
2.消除代码运行的一些不安全之处,保证代码运行的安全;
3.提高编译器效率,增加运行速度;
4.为未来新版本的JS做好铺垫

严格模式体现了JS更合理,更安全,更严谨的发展方向,包括IE10在内的主流浏览器都已经支持它了

注意:同样的代码,在“严格模式”中,可能会有不一样的运行结果,一些在“正常模式”下可以正常运行的语句,在“严格模式”下将不能运行,掌握这些内容,有助于更细致深入的理解JS,让你编程一个更好的程序员。

2.严格模式的调用

如何进入严格模式?
进入严格模式的标志,书写这一行语句 "use strict"
老的浏览器会把他当成一串普通的字符串,加以忽略

“严格模式”有两种调用方式,适用于不同的场合;
针对整个脚本文件:将 "use strict" 放在脚本文件的第一行,则整个脚本文件都将以“严格模式”运行,
    如果这行语句不在第一行,则无效,整个脚本以“正常模式”运行。
    如果不同模式的代码文件合并成一个文件,这一点需要特别注意。

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

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

匿名函数:不需要调用,直接执行,可以自调用
(functiob(){
    console.log(1);
})()

3.进入严格模式之后的行为变更

进入严格模式之后,需要进行哪些行为变更:
1.全局变量声明时,必须加关键字(var)
    正常模式:a = 10;    console.log(a)    //10
    严格模式:a = 10;    console.log(a)    //a is not defined

2.this无法指向全局对象
    正常模式:function fn(){ console.log(this) }        //window
    严格模式:function fn(){ console.log(this) }        //undefined

3.函数内不允许出现重名参数
    正常模式:function fn( a,b,b ){ console.log(a,b) }
            fn(1,2,3)        //1,3
    严格模式:function fn( a,b,b ){ }
     //报错:Duplicate parameter name not allowed in this context    在此上下文中不允许出现重复的参数名

4.arguments对象
    4.1 arguments对象不允许被动态改变
        正常模式:function fn(a){
                    a=20;
                    console.log(a);                //20
                    console.log(arguments[0]);     //20
                }
                fn(10);

        严格模式:function fn(a){
                    a=20;
                    console.log(a);                //20
                    console.log(arguments[0]);     //10
                }
                fn(10);
    4.2 arguments对象不允许被自调用(递归)
        正常模式:function fn(a){
                    if( a == 1 ){
                        return 1;
                    }
                    return arguments.callee(a-1) + a;
                }
                fn(3);            //6
        严格模式:function fn(a){
                    if( a == 1 ){
                        return 1;
                    }
                    return arguments.callee(a-1) + a;
                }
                //报错:'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
                //报错:"caller","arguments","callee",不能在严格模式下使用


5.新增的保留字:implements,interface,let,package,private,protected,public,static,yield
相关标签: 严格模式