javascript strict mode
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的更多相关文章
- JavaScript严谨模式(Strict Mode)
下面的内容翻译自It’s time to start using JavaScript strict mode,作者Nicholas C.Zakas参与了YUI框架的开发,并撰写了多本前端技术书籍,在 ...
- JavaScript语法支持严格模式:"use strict"
如果给JavaScript代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的.其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常.其二:如果在运行期出现了违反严格模 ...
- JavaScript中需要注意的几个问题
JavaScript是一门弱语言,她使用起来不像C/C++那样有十分繁琐的内存管理.类型定义等,所以学习JavaScript的门槛相对来说也比较低.门槛低并不意味着这门语言很简单,我们在使用的时候会遇 ...
- JavaScript小记
JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...
- JSHint Options 翻译
Enforcing options When set to true, these options will make JSHint produce more warnings about your ...
- Qunar实习回顾总结
今天教师节,陪老师喝点小酒,回来难得抽空,整理一下实习阶段的那些零零碎碎却很有用的知识. 1.关于页面中嵌入js代码 (1)有时为了精确控制代码执行顺序流,会将js代码嵌入到网页之中.优点:改变代码触 ...
- Javascript use strict模式和对象
use strict 只能出现在脚本代码的开始或者函数体的开始.任何实体语句之前.Javascript的具体实现将它们解析为解释器自有的指令.这个指令的目的是说明后续的代码将会解析为严格代码. ECM ...
- JavaScript和angularJs语法支持严格模式:”use strict”
如果给JavaScript和angularjs代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的.其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常.其二:如果在运 ...
- Javascript 严格模式use strict
一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. 设立”严格模式”的目 ...
随机推荐
- oauth2.0实现sso单点登录的方式和相关代码
SSO介绍 什么是SSO 百科:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...
- php输出大段代码(含变量和方法)
echo<<<EOF <html> <body> <formname="MainForm"method="post&quo ...
- jquery.lazyload插件实现图片延迟加载
jquery.lazyload是一个实现图片延迟加载的jQuery 插件,它可以延迟加载长页面中的图片.在浏览器可视区域外的图片在初始状态下不会被载入,直到用户将页面滚动到它们所在的位置. 1.引入j ...
- .Net Core使用NLog记录日志
参见:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2 大致步骤: Nuget中引用NLog及NLog ...
- Linux多线程 - 基本操作
0. 线程 vs 进程 何为线程?线程即轻量级进程,如何理解轻量级这个概念? 我们知道,Linux的资源分为用户空间资源和内核空间资源: 用户空间资源:用来存放用户自定义的一些数据,用户可直接控制: ...
- UA 用户代理
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等.被广泛用来标识 ...
- 鼠标键盘失灵对策(Windows8.1)
Win8.1虽然比Windows Server 2008R2开关机速度快好多.可惜用了一年后发现Win8.1 大bug. 鼠标键盘老是失灵... 对应方案: 1. 将鼠标键盘的USB插头更换位置,比如 ...
- python数据类型之简单数据类型
变量使用注意事项 慎用小写字母l和大写字母O,因为它们可能被人看成数值1和0. 应使用小写的python变量名. 字符串 在python中,用引号括起来的都是字符串,其中的引号可以是单引号和双引号. ...
- 传统javabean与spring中的bean的区别
javabean已经没人用了 springbean可以说是javabean的发展, 但已经完全不是一回事儿了 用处不同:传统javabean更多地作为值传递参数,而spring中的bean用处几乎无处 ...
- 让iframe可编辑
function EnableEdit() { var editor; editor = document.getElementById("HtmlEdit").contentWi ...