zoukankan      html  css  js  c++  java
  • 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",不能在严格模式下使用
    
        
  • 相关阅读:
    (一)关键字
    何时使用或何时不使用malloc函数?学数据结构有感
    typedef int a[10]; 怎么理解?
    Java的向上转型和向下转型
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException 异常解决方法
    java.lang.IllegalArgumentException: Property 'dataSource' is required 的解决
    哈希表
    python之创建虚拟环境
    idea2020.1.1踩坑:找不到程序包和符号
    Mysql使用过程中的问题及解决方案
  • 原文地址:https://www.cnblogs.com/wuziqiang/p/12005527.html
Copyright © 2011-2022 走看看