• JavaScript基础05——严格模式


    严格模式:

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

     严格模式的作用:

     1.消除了JS语法的一些不合理、不严谨之处,减少一些怪异行为;
        2.消除代码运行的一些不安全之处,保证代码运行的安全;
        3.提高编译器效率,增加运行速度;
        4.为未来新版本的JS做好铺垫
     
        严格模式体现了JS更合理,更安全,更严谨的发展方向,包括IE10在内的主流浏览器都已经支持它了
     注意:同样的代码,在“严格模式”中,可能会有不一样的运行结果,一些在“正常模式”下可以正常运行的语句,在“严格模式”下将不能运行

    严格模式的用法:

        如何进入严格模式?
        进入严格模式的标志,书写这一行语句 "use strict"
        老的浏览器会把他当成一串普通的字符串,加以忽略
    
        “严格模式”有两种调用方式,适用于不同的场合;
        针对整个脚本文件:将 "use strict" 放在脚本文件的第一行,则整个脚本文件都将以“严格模式”运行,
            如果这行语句不在第一行,则无效,整个脚本以“正常模式”运行。
            如果不同模式的代码文件合并成一个文件,这一点需要特别注意。
    
        针对单个函数:将 "use strict" 放在函数的第一行,则整个函数以“严格模式”运行。
    
        脚本文件的变通写法:因为第一种调用方式不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数中
    
        匿名函数:不需要调用,直接执行,可以自调用
        (function(){
            console.log(1);
        })()

    进入严格模式后的行为变更:

    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",不能在严格模式下使用
    
        
  • 相关阅读:
    分数的加减法——C语言初学者代码中的常见错误与瑕疵(10)
    关于陈冰、陈良乔以及《我的第一本C++书》【转】
    逻辑训练与说理教育从小学开始【转】
    薛非《品悟C-抛弃C程序设计中的谬误与恶习》读后感part1【转】
    C语言初学者代码中的常见错误与瑕疵(9)
    为什么在我眼里你是一只傻逼——傻逼“常所用”句型之(1)——“就算……但是……”
    要心中有“数”——C语言初学者代码中的常见错误与瑕疵(8)
    220v转5v阻容降压电路
    IAR for stm8 memory窗口的功能
    stm8 io口重映射
  • 原文地址:https://www.cnblogs.com/wuziqiang/p/12005527.html
Copyright © 2020-2023  润新知