JavaScript-严格模式

一、严格模式和普通模式的不同?

  1、严格 ==》 变量必须通过var进行声明

  2、严格 ==》with被禁用

  3、严格 ==》eval作用域,eval()内的变量外面是读取不到的。

  4、严格 ==》禁止this关键字指向全局变量

  5、严格 ==》禁止函数内部遍历调用栈

  6、严格 ==》argunments对象的限制:argunments是函数的参数对象,严格模式做了修改:

    不允许对argunments赋值

    argunments不再追踪参数的变动

    禁止使用argunments,无法在匿名函数内部调用自身

      例子:var fn=function(num){

           num+=100;

           alert(num);

           alert(argunments[0]);

          }

          fn(100);

      结果:普通:200 200   严格:200 100

  7、严格 ==》禁止删除变量

  8、严格 ==》对禁止

5、严格 ==》

5、严格 ==》

5、严格 ==》

二、

  with 语句用于设置代码在特定对象中的作用域。(在低版本的浏览器中,会有内存泄露的情况,尽量不要使用)

三、严格模式

<script>
  "use strict"

<、script>

  ****with

<script>

  var obj={};

  var a=2;

  var b=3;

  with(obj){

    alert(a+b);  

  } 

</script>  

  结果是:5

如果是在严格模式下,就会报错,因为,严格模式下,with是不被承认的

<script>

  "use strict"          //严格模式

  var obj={};

  var a=2;

  var b=3;

  with(obj){

    alert(a+b);  

  } 

</script>

  结果是:报错

  ****this

  严格模式下,构造函数是会报错的,原因在于this

  //"use strict"

  var Cat=function(name)
  {
    this.name=name;
    this.say=function()
    {
      alert(this.name);
    }
  }
  Cat("猫咪");
  window.say();
  console.log(window);

  

  ****eval作用域

  "use strict"
  //严格模式下,会报错,因为eval()内的变量是读取不到的,只能在eval()内读取
  eval("var s=200;alert(s);");
  alert(s);
  //普通模式下,会报错,因为eval()内的变量,函数外面是不能使用的
  /* var abc=function()
  {
    eval('var s=200;');
  }
  abc();
  alert(s);
  */

原文地址:https://www.cnblogs.com/xiaoyangtian/p/7967848.html