ECMAScript 版本5是目前最广泛使用的js版本。

其中的一个重要feature strict mode很多人不是很清除和理解。

什么是strict mode?

strict mdoe是一种强制js解释引擎以一种和非stric mode不同的语义的方式来解释javascript代码。运行于script mode的代码有以下几个特征:

1. 剔除一些句法和语义功能,也就是说,你不能象传统js那样随心所欲

2. 修正部分功能的语义,即:一部分代码在strict mode和非strict mode下执行的语义是不同的。

3. 如果有语法或者语义的歧义,在stric mode下直接报出错误,而非隐含运行;

4. stric mode仅仅应用于代码段,也就是说,你不能将strict mode一次性应用到所有js文件中,除非你concat所有的js文件.

stric mode出现的主要白目的是在js开发过程中,强制一些运行时的discipline. 我总是感觉js实在太过灵活,而stric mode就是将这个灵活做以下限制。很多时候之前必须由资深工程师自己注意的tricky部分,那么现在就由stric mode强加进来了。比如看看下面这段代码,你看有什么问题吗?实际上"stric mode"下,js引擎就会报错:

function findProduct(numbers) {
"use strict";
var product = 0,
len = numbers.length;
for(var i = 0; i < len; ++i) {
prodct = product * numbers[i]; // ReferenceError: Variable undefined in strict mode
}
return product;
}

浏览器支持情况:

几乎所有的现代浏览器都在他们的js引擎中支持strict mode. IE10以上都支持strict mode,

strict mode contexts:

"use strict";
alert("Look ma! Strict mode!");

几种使能方式:

// global code
<script>
"use strict";
// global strict mode code here
</script>
// 2. Eval code:
eval("'use strict'; // strict code here");
// or invoked from strict mode code:
"use strict";
eval("// strict code here");
// function code:
function foo() {
"use strict";
// strict code here
}
// Functions declared in strict mode code inherit the strictness:
function foo() {
"use strict";
var bar = function () {
// strict code here
};
bar();
}

strict mode到底有哪些新的限制呢?

1. 标示符必须在他们被赋值前声明:

2. 对于没有context的function call不会自动赋予context,比如如果函数被调用不给一个obj.method这种方式的话,函数并不会给于this为window对象。

function foo() {
// prints "true"
print(this === window);
}
foo(); function foo() {
"use strict";
// prints "false"
print(this === window);
}
foo();

3. reserved keywords不能用于标示变量名

"use strict";
var yield; // SyntaxError: Expected identifier

https://blogorama.nerdworks.in/javascriptstrictmoderestrictio/

javascript strict mode的更多相关文章

  1. JavaScript严谨模式(Strict Mode)

    下面的内容翻译自It’s time to start using JavaScript strict mode,作者Nicholas C.Zakas参与了YUI框架的开发,并撰写了多本前端技术书籍,在 ...

  2. JavaScript语法支持严格模式:"use strict"

    如果给JavaScript代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的.其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常.其二:如果在运行期出现了违反严格模 ...

  3. JavaScript中需要注意的几个问题

    JavaScript是一门弱语言,她使用起来不像C/C++那样有十分繁琐的内存管理.类型定义等,所以学习JavaScript的门槛相对来说也比较低.门槛低并不意味着这门语言很简单,我们在使用的时候会遇 ...

  4. JavaScript小记

    JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...

  5. JSHint Options 翻译

    Enforcing options When set to true, these options will make JSHint produce more warnings about your ...

  6. Qunar实习回顾总结

    今天教师节,陪老师喝点小酒,回来难得抽空,整理一下实习阶段的那些零零碎碎却很有用的知识. 1.关于页面中嵌入js代码 (1)有时为了精确控制代码执行顺序流,会将js代码嵌入到网页之中.优点:改变代码触 ...

  7. Javascript use strict模式和对象

    use strict 只能出现在脚本代码的开始或者函数体的开始.任何实体语句之前.Javascript的具体实现将它们解析为解释器自有的指令.这个指令的目的是说明后续的代码将会解析为严格代码. ECM ...

  8. JavaScript和angularJs语法支持严格模式:”use strict”

    如果给JavaScript和angularjs代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的.其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常.其二:如果在运 ...

  9. Javascript 严格模式use strict

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. 设立”严格模式”的目 ...

随机推荐

  1. 【数组】Majority Element II

    题目: Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The alg ...

  2. InterView之PHP2

    PHP 理论知识 常用的超全局变量(8个) $_GET ----->get传送方式 $_POST ----->post传送方式 $_REQUEST ----->可以接收到get和po ...

  3. python中不可变数据类型和可变数据类型

    在学习python过程中我们一定会遇到不可变数据类型和可变数据类型. 1.名词解释 以下所有的内容都是基于内存地址来说的. 不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址 ...

  4. 链式编程:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)

    public class NutritionFacts { private final int servingSize; private final int servings; private fin ...

  5. Velocity学习笔记

    一.为什么要使用velocity? 很多人下载了EasyJWeb的开源应用示例,但是对动态页面模板文件中的标签使用不是很熟悉,这里简单介绍一下.EasyJWeb特定把视图限定为Velocity,因为我 ...

  6. [笔记] Python 图片转字符画

    一.介绍 用Python 代码完成图片转字符画 二.python 环境 Python 3.6.6 pillow 5.1.0  Python 图像处理库, 需要另外安装 三.原理 gray = 0.21 ...

  7. Java接口调用工具类

    package com.qiyuan.util; import java.io.BufferedReader; import java.io.IOException; import java.io.I ...

  8. 基于线程实现的生产者消费者模型(Object.wait(),Object.notify()方法)

    需求背景 利用线程来模拟生产者和消费者模型 系统建模 这个系统涉及到三个角色,生产者,消费者,任务队列,三个角色之间的关系非常简单,生产者和消费者拥有一个任务队列的引用,生产者负责往队列中放置对象(i ...

  9. tcpdump一个命令的剖析

    简单介绍:用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据 ...

  10. [日常] CentOS安装最新版redis设置远程连接密码

    wget http://download.redis.io/releases/redis-4.0.8.tar.gztar -zxvf redis-4.0.8.tar.gzmake完成后就会放在了src ...