JavaScript严格模式 "use strict"

1.在严格模式下,变量必须显示声明(var/let/const),直接给变量赋值,不会隐式创建全局变量

(function(){
  //非严格模式
  a = 10;
  console.log(a);  //10
})();

(function(){
  "use strict";   //严格模式
  b = 10;   //ReferenceError: b is not defined
  console.log(b);
})();

(function(){
   "use strict";   //严格模式
    var a=b=1;// //ReferenceError: b is not defined
    console.log(a,b)
})();
    

2.在严格模式下,this默认是undefined

(function(){
  //非严格模式
  console.log(this);  //window
})();

(function(){
  "use strict";   //严格模式
  console.log(this);    //undefined
})();

3.在严格模式下,不可以在eval参数中定义变量和函数

(function(){
  //非严格模式
  var str1 = "var name='Lily';";
  var str2 = "function fun1(){console.log('hello');}";
  eval(str1);   //这个name定义在了全局,而不是函数内
  eval(str2);
  console.log(name);   //Lily
  fun1();    //hello
})();

(function(){
  "use strict";   //严格模式
  var str1 = "var alias='Lily';";
  var str2 = "function fun2(){console.log('hello');}";
  eval(str1);
  eval(str2);
  eval("name = 'Bob'");    //修改全局变量name
  console.log(name);   //Bob
  console.log(alias);    //ReferenceError: alias is not defined
  fun2();    //ReferenceError: fun is not defined
})();

4.在严格模式下,有名参数是arguments参数的静态副本,而非引用。

(function(){
  //非严格模式
  var name = "Bob";
  test(name);

  function test(alias){
    alias = "Lily";
    console.log(alias);  //Lily
    console.log(arguments[0]);  //Lily
  }
})();

(function(){
  "use strict";   //严格模式
  var name = "Bob";
  test(name);

  function test(alias){
    alias = "Lily";
    console.log(alias);  //Lily
    console.log(arguments[0]);  //Bob
  }
})();

猜你喜欢

转载自blog.csdn.net/qq_34035425/article/details/83088074