严格模式

1. JavaScript中存在两种模式:正常模式和严格模式。

2. ES5新添加了严格模式,目的:

1)消除js语法的一些不合理、不严谨之处、减少一些怪异行为;

2)消除代码运行的一些不安全之处,保证代码运行的安全;

3)提高编译器效率,增加运行速度;

4)为未来新版本的js做好铺垫

3. 严格模式的标志:"use strict"。

4. 严格模式的两种调用方法

1)针对整个脚本文件

<script>
  //严格模式
  //将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。
  "use strict";
  console.log("这是严格模式。");
    
  //以上写法不利于文件合并,所以更好的做法是将整个脚本放在一个立即执行的匿名函数中
  (function () {
    "use strict";
    // some code here
  })();
</script>

<script>
  //正常模式
  console.log("这是正常模式。");
</script>

2)针对单个函数体

//将"use strict"放在函数体的第一行,则整个函数以"严格模式"运行。
function strict() {
  "use strict";
  return "这是严格模式。";
}

function notStrict() {
  return "这是正常模式。";
}

5. 严格模式和正常模式的语法和行为上的不同。

    5.1正常模式下,变量没有声明就赋值,默认是全局变量,而严格模式下,会直接报错。严格模式禁止这种用法,全局变量必须显示声明。

+ function () {
  "use strict"
  a = 1; //Uncaught ReferenceError: a is not defined
}()

+ function () {
  a = 1; //window.a
}()

    5.2 严格模式下,在某些情况只允许静态绑定。

1)禁止使用with语句,因为with语句无法在编译时就确定,属性到底归属哪个对象。

2)创建eval作用域

//禁止使用with
var v = 1;
var obj = {};
with(obj) {
	v = 2;
} // Uncaught SyntaxError: Strict mode code may not include a with statement
    
  //正常模式下,JS语言有两种变量作用域:全局作用域和函数作用域;
  //严格模式下会创建第三种作用域:eval作用域。
  +function(){
    //正常模式下,eval作用域取决于它所处的作用域
    console.log("正常模式")
    var a = 1;
    console.log(eval("var a = 3;a")); //3
    console.log(a); //3
  }()

  +function(){
     //严格模式下,eval语句本身就是一个作用域,不能再生成全局变量了,它所生成的变量只能用于eval内部
    "use strict"
    var a = 1;
    console.log(eval("var a = 3;a")); //3
    console.log(a); //1
   
  }()

    5.3 增强的安全措施

5.3.1 禁止this关键字指向全局对象

5.3.2 禁止在函数内部遍历调用栈

    5.4 禁止删除遍历

    5.5 显式报错

 1)正常模式下,对一个对象的只读属性赋值,不会报错,只会默默失败。严格模式下,将报错。

 2)严格模式下,对一个使用getter方法读取的属性进行赋值,会报错。

 3)严格模式下,对禁止扩展的对象添加新属性,会报错。

 4)严格模式下,删除一个不可删除的属性,会报错。

    5.6 重名报错

1)对象不能有重名的属性

2)函数不能有重名的参数

    5.7 禁止八进制的前缀为0的表示法

    5.8 arguments对象的限制

1)不允许对arguments赋值

2)arguments不再追踪参数的变化

3)禁止使用arguments.callee,无法在内部函数调用自身了

    5.9 函数必须声明在顶层,即严格模式只允许在全局作用域或函数作用域顶层声明函数。

    5.10 保留字作为变量名会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值