• javascript的严格模式


    开启程序的严格模式:"use strict".
    一:语法限制.有7种语法在严格模式中被禁用了.

     1.对象直接量的相同属性名.

    1 "use strict";       
    2         var obj = {
    3         "name":"guoyans",
    4         "name":"kldd"
    5         }

    2.在函数中,形参数中带有相同的参数名.

     function app(x, x, z) { return x + z; }
            var app = new Function("x", "x", "z", "return x+z");

    在非严格模式下,访问多个同名的形参时,只有最后一个声明是有效的.

     //下面的函数在非严格模式下是有效的.
            function foo(m, m, n, m, a, n) { return m + n; }
            //显示10,m和n分别为4,和6
            alert(foo(1,2,3,4,5,6));

    3.不能声明或重写eval和arguments这两个标识符,
    也就是说,他们不能出现在赋值运算的左边,也不能用var语句来声明.
    顺便说一下,arguments和eval都不能用delete删除

     1 //禁止:向eval或arguments赋值
     2         eval = function () { }
     3         //禁止:重新声明eval或arguments
     4         var arguments;
     5         //禁止:将eval或arguments用做catch子句的异常对象名
     6         try {
     7 
     8         } catch (eval) {
     9 
    10         }
    11         //禁止:将eval或arguments用做函数名
    12         function arguments() { }
    13         //禁止:删除arguments,或形参名
    14         function foo() {
    15             delete arguments;
    16         }

    4.使用0前缀声明的8进制的常量.

    var num = 012;

     5.用delete删除显示声明的标识符,名称或具名函数.

    //删除变量名
            var x;
            delete X;
            //删除具名函数
            function foo() { }
            delete foo;
            //删除arguments,或形参名
            function foo(x) {
                delete x;
            }
            //删除catch子句中声明的异常对象
            try {
    
            } catch (e) {
            delete e;}

    6.代码中使用一些扩展的保留字.
    implements,interface,let,package,private,prototected,public,
    static,以及yield.

    1  //使用扩展保留字
    2     var yield;
    3     function let() { }

    7.使用width语句.

    1  with (document) {
    2         write("哈哈哈");
    3     }

    1.因为第一个<script>中,第一行的代码
    已经表明当前引擎运行在严格模式中,因此foo();
    函数在语法解释期就会发生异常,程序解释到此停止.
    第二个<script>也不会解释了.
    2.如果在某个函数的内部加入"use strict".
    那么他就不会影响到外面的代码了

    1 function foo() {
    2             "use strict";
    3             //...
    4         }
    5         var eval;

    这段代码中,foo()函数运行在严格模式下,
    而外面的代码却运行在非严格模式下,所以var eval是合法的.
    上面的代码可能会让人产生误解,
    use strict后面的代码会受到严格模式的限制,
    那么前面的代码是不是就不会受到严格模式的限制呢.
    比如说foo这个位置的函数名还有后面的形参就不会受到限制呢.

     function eval(x,x,a) {
                "use strict";
                //...
            }
            var eval;

    这段代码在语法解释时,抛出错误.因为use strict控制的是整个代码块,
    函数名和形参还有函数体构成一个代码块,所以函数名和参数的设置在严格模式下都是会报错.

    如果"use strict"出现在代码中间,那么他将会被忽略,
    代码也不会进入严格模式.

    1 //这列是空行
    2         "use strict";
    3         var eval;
    4         function foo(m, n) {
    5             ;
    6             "use strict";
    7             return m;
    8         }

    这段代码就就不会进入严格模式,
    因为"use strict"在所在的代码块中,不是位于第一行.

  • 相关阅读:
    The Country List
    hdoj1215--七夕节(数学)
    Poj 1654--Area(叉积)
    Poj2229--Sumsets(递推)
    数据预处理 center&scale&box-cox
    caret 分类回归树 用法
    ensemble 的2篇入门 文章
    数组 array 矩阵 list 数据框 dataframe
    R list frame, matrix
    R 如何 隐藏坐标轴
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/3654751.html
Copyright © 2020-2023  润新知