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在更严格的条件下运行. 设立”严格模式”的目 ...
随机推荐
- python字符串中包含Unicode插入数据库乱码问题 分类: Python 2015-04-28 18:19 342人阅读 评论(0) 收藏
之前在编码的时候遇到一个奇葩的问题,无论如何操作,写入数据库的字符都是乱码,之后是这样解决的,意思就是先解码,然后再插入数据库 cost_str = json.dumps(cost_info) cos ...
- js操作符类型转换
乘法 我们来看下前面的题目: console.dir(5*"5"); console.dir(5*"a");//NaN console.dir(5*NaN);/ ...
- 【优化】Filddler用于移动端
Fiddler是一个非常强大的Web调试工具,它能捕获所有客户端和服务器的http和https请求,我们可以对请求监视.设置断点,也能修改输入输出数据,这些特性使得Fiddler成为广大web开发者的 ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- Pipenv——最好用的python虚拟环境和包管理工具
pipenv 是Kenneth Reitz大神的作品,能够有效管理Python多个环境,各种包.过去我们一般用virtualenv搭建虚拟环境,管理python版本,但是跨平台的使用不太一致,且有时候 ...
- Entity Framework取消修改
最近碰到一个场景:在Entity Framework保存错误的时候,需要将该错误记录在DB中.因为DB在savechange的时候会继续保存之前的数据,所以一直会报错,无法保存错误日志. 这就需要实现 ...
- WPF进度条
ProgressBar控件与传统WinForm使用方法完全一样,我们只需关注: Minimum——最小值,默认为0: Maximum——最大值,默认为100. Value——当前值. 关键是它的控 ...
- sqlserver数据导入导出问题
sqlserver,如果用结果另存为,导出txt数据,然后在导入数据库,有时候会出问题,很难解决. 但是全选,右击,复制到自己创建的txt里面,在导入数据,就不会有问题的. 神奇,不知道为什么,但是能 ...
- Oracle11g密码过期处理方法
首先 查询密码有效期: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIF ...
- vps服务器搭建——Linode VPS 20美元优惠获取教程
转载:http://www.cuishifeng.cn/linode/index.html?v=2 声明:本文旨在教大家怎么获得linode 20美元优惠,并免费使用4个月vps,请低调薅羊毛!(多张 ...