ES5严格模式(use strict)笔记

 

严格模式就是让js代码在更严格的环境下运行。

目的:

  1. 消除JavaScript语法的不严谨和不合理之处,减少怪异行为。
  2. 消除代码运行的不安全之处,保证代码的运行安全。
  3. 提高编译器的效率,增加编译速度。
  4. 为未来新版本的Javascript做好铺垫。

同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。

进入严格模式的标志是下面语句,老版本不支持的浏览器就会忽略此语句:

“use strict”;

严格模式的几种调用方式:

  1. 放在脚本文件的第一行,整个脚本文件就会以严格模式执行,如果不在第一行,脚本文件将以正常模式运行。
  2. 放在函数内部第一行,整个函数就会以严格模式运行。
  3. 第一种方法不利于文件合并的情况,可以调用第二种方法,将脚本文件都放到一个匿名函数内执行。
(function () {
    "use strict";
    // some code here
})

严格模式对JavaScript的语法和行为都做了一些改变

  1. 全局变量要显式声明,不然会报错。
  2. 静态绑定,JavaScript是允许动态绑定的,属性和方法属于哪个对象在运行时确定,不在编译时确定。严格模式对动态绑定做了一些限制,只允许静态绑定,属性和方法属于哪个对象需要在编译时就要确定,这样做有利于编译效率的提高,代码更容易阅读。
  • 禁止使用with语句。因为with语句语法在编译时确定属性属于哪个对象。
  • 创建eval作用域。正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

增强的安全措施

  1. 禁止this指向全局作用域。
  2. 禁止在函数内部遍历调用栈
  3. 禁止删除变量:严格模式下将不能删除变量,只有configurable设置为true的才能删除。
  4. 显式报错。
  5. 重名错误。对象不能有重名的属性、函数不能有重名的参数。
  6. 禁止八进制表示法。
  7. arguments对象的限制:1、不允许对arguments赋值。2、不再追踪参数的变化。3、禁止使用arguments.callee,无法在匿名函数中调用自身了
  8. 函数必须声明在顶层
  9. 增加了一些保留字,用这些保留字命名变量将会报错。implements, interface, let, package, private, protected, public, static, yield。
function f1(){

    "use strict";

    f1.caller; // 报错

    f1.arguments; // 报错

  }

f1();

 参考:阮一峰的网络日志   http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值