cp from : https://www.cnblogs.com/giggle/p/5252185.html

ECMAScript5引入一个严格模式的概念(Strict Mode)。

它的作用就是不让Javascript的容错那么高,让我们对编写代码的规范要求高一点。

比如,当我们使用严格模式编写JavaScript代码时,我们不能隐式的申明变量,必须带var。

那怎么使用严格模式(Strict Mode)呢?

当我们想让代码启动严格模式(Strict Mode)时,我们可以在代码的开头或者函数function的开头中添加”use strict”。

倘若我们在整个代码中启用严格模式(Strict Mode),那么所有代码都必须遵循严格模式的规范;

倘若我们在一个function中启用,那么只在这个function中,得遵循严格模式的规范。

我们一起来写个demo,体验体验下。

<!DOCTYPE html> <head> <title>strict mode</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> //启用严格模式 "use strict"; function testFunction(){ var testvar = 4; return testvar; } //This causes a syntax error.  testvar = 5; </script> </body> </html>

在上面的demo中,我在整个代码中启用严格模式,但我在function的外部声明变量时,没有加var,因此不符合严格模式规范,所以运行代码时会报错。

哈,有点意思。

刚才我们是在整个代码中启用严格模式,下面我们再来写个demo,在function里启用严格模式。

<!DOCTYPE html> <head> <title>strict mode</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function testFunction(){ "use strict"; testvar = 4; return testvar; } testvar = 5; </script> </body> </html>

打开chrome调试器:

纳尼!!怎么没有报错?!!

我们再看看上面的代码,哈哈哈,原来是我们没有调用testFunction嘛,既然没执行它,它怎么会启用严格模式呢?

修改代码如下:

<!DOCTYPE html> <head> <title>strict mode</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function testFunction(){ "use strict"; testvar = 4; return testvar; } //调用testFunction  testFunction(); testvar = 5; </script> </body> </html>

再看看chrome结果:

哇咔哇咔,严格模式还是挺严格的嘛,如果我们在写代码中,想启用的严格模式,那就得注意咯。

下面列举了在严格模式下的几个重点限制:

JavaScript

限制

例子

变量

使用一个变量,但是没有用var去声明

    testvar = 4;

delete

删除一个变量,函数或者agrument

    var testvar = 15;

    function testFunc(){}

    //causes fault

    delete testvar;

    delete testFunc;

属性名

在声明对象时,重复使用一个属性名

    var testObj = {

     prop1: 10,

    prop2: 15,

    //causes fault

    prop1: 20

    }

参数名

在函数参数中,重复使用一个参数名

function testFunc(param1,/*causes fault*/param1){

return 1;

}

有潜力成为关键字

在未来有可能成为有用的关键字,不能用来作为变量名或者函数名

    implements

    interface

    package

    private

    protected

    public

    static

    yield

八进制数

将八进制数赋给一个变量

    var testoctal = 010;

    var testescape = \010;

this

当this为null或者undefined的时候,它是不能被转换成全局对象(window)的

    function testFunc(){

    return this;

    }

    var testvar = testFunc();

在不是严格模式下,这个testvar的值是全局对象,但在严格模式下,它的值却是undefined.

eval,arguments

eval,arguments不能作为函数名或者参数名、变量名

    var eval = 10;

    var arguments =10;

arguments

在函数中,我们不能通过改变arguments,来改变对应参数值

    function testArgs(oneArg){

    arguments[0] = 20;

    }

在非严格模式下,我们如果想改变oneArg,可以通过Arguments[0]来改变,如上代码这样,执行后,oneArg和Arguments[0]的值都是20;但是在严格模式下,我们不能通过arguments来改变参数名的值,arguments仅仅是一个拷贝而已。

arguments.callee

不允许这么使用

    function(testInt){

      if(testInt-- == 0){

      return;

         }

         arguments.callee(testInt);

     }

[Web 前端] ECMAScript5之StrictMode相关推荐

  1. Web前端性能优化——编写高效的JavaScript

    转载自:https://www.cnblogs.com/MarcoHan/p/5315361.html 前言 随着计算机的发展,Web 富应用时代的到来,Web 2.0 早已不再是用 div+css ...

  2. 零基础开始学 Web 前端开发,有什么建议吗?

    零基础学前端,学习之前,一定要问自己一个问题: 我适合学前端吗? 前端虽然相比较后端而言,没有那么难,但是对很多零基础的小白而言还是有点难度的. 所以我们会发现,一些同学刚开始对前端一无所知,然后盲目 ...

  3. 防止首网页篡改 html,网站web前端的加密方式 防止数据被篡改

    说到网络前端开发,我们首先可以想到的是浏览器.HTML.CSS.JavaScript等开发中必不可少的软件工具和编程语言.在这个专业领域,作为开发人员,我们都知道前端的所有数据都是不可信的.因为构成前 ...

  4. 学习Web前端,是应该自学,还是参加培训班?

    先说观点,我强烈建议每个人都要自学,不要参加培训班. 我干web前端工程师这个职位已经有6年多的时间,之前在蚂蚁金服做过2年,后来离开是因为加班实在熬不住才走的,像这些已经上市的互联网公司几乎没有不加 ...

  5. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  6. 对WEB前端的几段思考(一)——界面设计和性能优化(整理中)

    尽管我并非艺术出生,既没有任何设计基础,又没有较高艺术涵养,也深谙在短时间内创造一定艺术造诣并非易事,但是既然当初选择从事网站前端开发,我的目光不能仅停留在前端代码上.作为一名志向在前端领域发展的人员 ...

  7. web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?

    一.了解web前端 所谓"知己知彼,百战不殆",在学习web前端之前,还是让我们先了解一下什么是web前端吧! 所有用户终端产品与视觉和交互有关的部分,都属于前端开发的领域.从狭义 ...

  8. web前端开发最佳实践_学习前端Web开发的最佳方法

    web前端开发最佳实践 为什么要进行网站开发? (Why web development?) Web development is a field that is not going anywhere ...

  9. 从零学web前端_从零到前端英雄(第2部分)

    从零学web前端 This article is part two of the "From Zero to Front-end Hero" series. In part one ...

最新文章

  1. 550 万华人在美人才现状:7 诺奖、300 院士,320 八大常春藤高校终身正教授......
  2. android 拍照空指针,空指针异常时嵌入照片中的Android
  3. LeetCode-53. 最大子序和-最简单的动态规划(Python3)
  4. C/C++ 之 C发展史及 各标准特性说明
  5. java对cpu线程的要求_java-CPU份额对线程有什么影响
  6. leetcode 506. 相对名次(Java版)
  7. 关于导入项目eclipse出现乱码的问题
  8. 使用html5+的plus调起相机拍照,使用canvas压缩图片,转成base64传到后台
  9. 笨办法学 Python · 续 练习 34:分析器
  10. 本地html调试java接口_solr源码通过idea进行本地调试
  11. HDU 4336:Card Collector 期望+状压
  12. PUBG - 罗技鼠标宏 | 兴趣使然的项目,完虐收费宏!点个Star支持一下作者!
  13. 1000个脑筋急转弯
  14. Gilbreath原理中的数学与魔术(一)——Gilbreath Shuffle First Principle
  15. Suspense组件的使用
  16. 第三方支付宝API应用流程
  17. C语言 从txt文件中提取特定的数据
  18. Dell Inspiron15-7567 拆机插放内存条步骤
  19. 开源的跨平台AI模型部署总有一款是你的菜
  20. 墨尔本大学计算机硕士gpa,2020年去墨尔本大学读硕士gpa成绩要求是多少?各专业入学要求汇总...

热门文章

  1. Android Studio使用SQLite数据库
  2. 使用机器学习和深度学习对PE进行二分类和多分类
  3. 和誉医药与礼来达成全球合作和独家许可协议;瑞士制药公司接管BELEODAQ特别准入计划 | 医药健闻...
  4. 【Markdown】Markdown和插入图片的解决方法
  5. 如何编制政府采购投标文件
  6. UML 类图-时序图-用例图
  7. 番茄花园版Windows XP作者被拘留
  8. 计算机网络应用技术论文,计算机网络应用技术论文(2)
  9. c语言程序填空怎么给分,C语言程序填空题-20分
  10. 微软笔试之反思(二)