• 严格模式详解


    1.严格模式的好处

      1.1消除javascript不合理、不严谨之处,减少怪异行为

      1.2消除代码的不安全之处,保证代码的安全运行

      1.3提高编译器的效率,增加运行速度

      1.4为后续版本的javascript做铺垫

    2.严格模式的进入标准

      2.1"use strict"(老版本不支持将会忽略,变为不同模式)

    3.如何调用

      3.1整个脚本的调用

       放在脚本的第一行将是整个脚本都是严格模式,不在第一行则无效,所以如果多个严格模式的文件合并时要注意

    1 <script>
    2     "use strict";//放在脚本的第一行将是整个脚本都是,不在第一行则无效
    3         console.log("这是严格模式");
    4 </script>

      3.2单个函数的调用

    1 <script>
    2     (function(){
    3        "use strict"
    4           console.log("这是单个函数的调用");  
    5      })()    
    6 </script>

     4.语法和行为的改变

      4.1禁止使用没有声明的变量(在普通模式中没有声明就赋值的变量默认是全局变量);

    1 <script> 
    2     v = 3;//报错,v没有声明
    3     for(i=0;i<5;i++){}//报错,i没有声明
    4 </script>

      4.2静态绑定

             javascript是允许"动态绑定",即某些属性和方法到底是属于那个对象,不是在编译时确定的而是在运行的时候确定的,而严格模式是不允许"动态绑定"的,也就是说在编译的时候就确定了属性和方法是属于哪个对象,

    好处(这样有利于提高编译效率,代码也更容易阅读,更少出意外);

         4.2.1禁止使用with

    1 var col = {
    2         v:4,
    3         l:5
    4     }
    5     with(col){//with为语句指定特定的对象,严格模式下不能使用with,because无法在编译时确定属性到底属于哪个对象
    6         console.log(v);//普通模式下值为4
    7     }

         4.2.2创建eval作用域

    1        var v = 1;
    2        console.log(eval("var v = 5; v;"));//在严格模式下eval本身就是一个作用域,不能再生成全局变量了
    3         console.log(v);
    4 //严格模式下输出5;1
    5 //普通模式下输出5;5

      5.增强安全措施

        5.1禁止this指向全局变量

      

     1 (function foo(){
     2         "use strict"
     3         console.log("show this:"+(this));//严格模式下禁止this指向全局变量,使用this会是undefined;
     4     })();
     5 
     6 
     7 function aa(){
     8         "use strict"
     9         this.a = 1;
    10     }
    11         aa(); //直接调用aa()会报错,应为此时的this是undefined
    12     var bb = new aa();//this对象引用bb对象,还继承了该函数的原型
    13     console.log(bb.a);//返回的是1;

       6.禁止删除变量

        严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

     1 "use strict";
     2  
     3 var x;
     4  
     5 delete x; // 语法错误
     6  
     7 var o = Object.create(null, 'x', {
     8     value: 1,
     9     configurable: true
    10 });

      7.重名错误

        7.1对象不能有重名属性

        

    1 (function(){
    2     "use strict"
    3     var obj = {
    4         p:1,
    5         p:2
    6     }
    7     console.log(obj.p);//在高版本的浏览器中是可以显示2的,在低版本中会报错
    8 })();

        7.2函数不能有重名参数

    1 function f(a,a,b){
    2         "use strict"
    3         a = 2;
    4         return [a,arguments[0]];
    5     }//Duplicate parameter name not allowed in this context

      8.函数必须声明在顶层(然而我运行后是没有报错的,是现在的浏览器都支持了么)

        将来Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。

     1 "use strict";
     2  
     3 if (true) {
     4  
     5   function f() { } // 语法错误
     6  
     7 }
     8  
     9 for (var i = 0; i < 5; i++) {
    10  
    11   function f2() { } // 语法错误
    12  
    13 }

      9.保留字

        为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。

        使用这些词作为变量名将会报错。

    1 function package(protected) { // 语法错误
    2  
    3   "use strict";
    4  
    5   var implements; // 语法错误
    6  
    7 }

    这是宝宝看到别人的文章后自己实践了一下发现有些问题,就自己半应用半用自己的实践结果的总结,还有一些其他的自己没有用到就没有写

    http://www.cnblogs.com/ranzige/p/3564113.html参考地址

  • 相关阅读:
    方法的重载理解
    JAVA 三种循环的总结
    模拟时间倒计时
    制作漂浮广告效果
    js+css+html实现抽奖小程序
    将系统时间转换为汉字表示的四种方法
    简单的导航栏
    模仿光标闪烁,光标移动,自动切换背景
    sublime插件emmet安装和使用
    现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
  • 原文地址:https://www.cnblogs.com/sunnie-cc/p/6511115.html
Copyright © 2020-2023  润新知