• js的严谨模式


    一.怎么用

    <script type="text/javascript">

        "use strict";     //放在脚本文件第一行,整个脚本将以“严格模式运行”。如果这行语句不在第一行,则无效,整个脚本以"普通模式"运行

    </script>

    也可以将它放在某个函数体内,但是也要放在第一行,则整个函数以“严格模式”运行

    二.如果多人协作开发,有好几个函数,但是我想用严谨模式,别人没用,那怎么办?

    用一个匿名函数

    (function(){

        "use strict";

    })();

    三.严格模式和普通模式的区别

    1.严谨模式下,变量必须通过var声明,否则会报错

    2.严谨模式下,不能使用with关键字,会报错 (with关键字平时也少用,运行时特别是在ie下可能会存在内存泄露的情况,会导致js运行起来很慢)

    3.严格模式下多了一种作用域,普通模式下两种作用域:全局作用域和函数作用域。严谨模式下,多了一种eval作用域,eval可以把字符串变成真正的js去运行。

    普通模式下eval语句的作用域,取决他处于全局作用域,还是处于函数作用域,严格模式下,eval语句本身就是一个作用域,不能够再生成全局变量了,它所生成的变量只能用于eval内部

    普通模式下

    eval("var x=20;");

    alert(x);      //弹出20

    若改成

    var a=function(){

        eval("var x=20;");

    }

    a();

    alert(x);

    输出x没有定义

    eval("var x=20;alert(x);")

    alert(x);

    普通模式下,弹出两次20

    严谨模式下,就第一次弹出20,第二次未定义

    4.严谨模式下,禁止this关键字指向全局对象,即构造函数只要不通过new实例化对象,那么就会直接报错

    5.严谨模式下,为了让代码更安全,禁止在函数内部遍历调用栈

    var fn=function(){

        alert(fn.arguments.length);

    };

    fn(12,34);

    普通模式下,输出2,严谨模式下报错

    6.严谨模式下,为了让代码更安全,禁止删除变量

    平时也无法删除变量(用delete),但不会报错(delete能删除对象中的元素)

    严谨模式下,用delete删除变量会报错

    7.普通模式下,对一个对象的只读属性赋值,不会报错,只会默默地失败(赋值不上)。严谨模式下会报错

    8.严谨模式下,对禁止扩展的对象添加新属性,会报错

    var o={};

    o.x=100;

    Object.preventExtensions(o);

    o.y=200;

    console.log(o);

    会报错,x属性可以添加上去

    普通模式下,虽然y也添加不上去,但不会报错

    9.普通模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值,严格模式下属于语法错误

    10.普通模式下,如果函数有多个重名参数,可以通过arguments[i]读取,严格模式下有多个重名参数属于语法错误

    11.禁止八进制数表示法,普通模式下,整数第一位如果是0,表示这是八进制数,严谨模式下,整数第一位是0将报错

    12.严谨模式下对arguments对象的限制

    ①不允许对arguments赋值

    ②arguments不再追踪参数的变化

    var fn=function(num){

        num+=100;

        alert(num);

        alert(arguments[0]);

    }

    fn(100);

    普通模式下输出200,200

    严谨模式下输出200,100

    ③禁止使用arguments.callee这意味着,我们无法在匿名函数内部调用自身(没办法递归)

    13.严谨模式下,函数声明必须在全局作用域或函数作用域的顶层,不允许在非函数代码块内声明函数

    var a=6;

    if(a>5){

        function a(){

            alert("严格模式下,我不应该在这里声明");            //但是匿名函数可以

        }

        fn();

    }

    14.严谨模式下,不能使用一些关键字,但是为了向将来的js新版本过渡,还是增加了一些保留字

    优点

    js代码可以写的更严谨,更完善,更安全

  • 相关阅读:
    测试工程师的分工
    功能点算法及在软件测试中的应用Part3
    功能点算法及在软件测试中的应用Part4
    开发丈夫和测试妻子
    好友的AA制生活
    测试数据建模
    Windows 工具总结
    C# ActiveX control without a form
    【原创】WebReuest在GetResponse()时异常信息为ProtocolError的解决
    使用ShellExecute带路径遇到的问题
  • 原文地址:https://www.cnblogs.com/zhangwenkan/p/4251447.html
Copyright © 2020-2023  润新知