博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈严格模式
阅读量:5009 次
发布时间:2019-06-12

本文共 1305 字,大约阅读时间需要 4 分钟。

ECMAScript 5的到来引入了严格模式,顾名思义,严格模式就是让javascript在一个更加规范的环境中运行。

让我们看看严格模式规范了哪些:

  • 原本的静默错误在严格模式中将会抛出错误
  • 严格模式进行了一些优化处理,有时候严格模式下的代码执行效率比普通代码要快
  • 严格禁止一些可能会在未来规范中定义的语法模式

触发严格模式的方式

// 针对整个脚本文件'use strict';var v = "Hi! I'm a strict mode script!"; // 针对当前函数function fn(){'use strict';// other code}

由于javasript的设计并不完善,导致在一些本该抛出错误的情况下,并没有抛出错误,导致在未来对于问题的修复会更加的困难。严格模式的出现,使得原本正常模式下的静默错误,抛出错误。让开发者第一时间发现。严格模式的一些改变

  • 全局变量显式申明
  • 对保留字,关键字,以及一些具有不可改写特性的变量赋值时,会抛出错误
  • 删除无法删除的属性时,会抛出错误
  • 函数的参数重名,则抛出错误
  • 禁止八进制表示法
  • 禁止给原始数据附值 (string, number, boolean, null, undefined, symbol)

静态绑定

Javascript语言的一个特点,就是允许”动态绑定”,即某些属性和方法到底属于哪一个对象,不是在编译时确定的,而是在运行时(runtime)确定的。

  • 禁止使用 with
  • eval 语句生成的变量只能用于eval内部
  • 禁止删除变量,只有configurable设置为true的对象属性,才能被删除

让eval和arguments更加简单

严格模式下的eval和arguments会减少奇怪的现象。

  • eval和arguments在严格模式下进行附值操作会抛出错误

  • 严格模式下的arguments存储的是原始的参数值,不会追踪动态变化

    function fn(a){    a = 2;    console.log(a,arguments[0]);}fn(1)// 普通模式 => 2,2// 严格模式 => 2,1
  • arguments.callee 不在被支持

“安全”的javascript

在严格模式下我们书写“安全”的Javascript。javascript通常在运行时进行检查,这一步是非常消耗性能的。严格模式的出现,能够一定程度上减少代码在运行时检查的需求。

  • 禁止this关键字指向全局对象
  • 禁止在函数内部遍历调用栈

为ECMAScript的未来做准备

  • 函数必须声明在顶部
    • 为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。
  • 新增了一些保留字保留字

在浏览器中使用严格模式

目前主流浏览器都已经支持了严格模式。但是我们不要过度依赖,因为目前在野生环境中存在只支持部分严格模式或者根本不支持的情况。所以当我们使用严格模式时,要做好浏览器检测。

附录

 
 
 

转载于:https://www.cnblogs.com/enmeen/p/7325450.html

你可能感兴趣的文章
python字符串实战
查看>>
wyh的物品(二分)
查看>>
12: xlrd 处理Excel文件
查看>>
综合练习:词频统计
查看>>
中文url编码乱码问题归纳整理一
查看>>
Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
查看>>
58. Length of Last Word(js)
查看>>
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>