- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ES5严格模式(Strict mode)
严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,第五版发布于2009年12月。旨在改善错误检查功能并且标识可能不会延续到未来JavaScript版本的脚本。ES5严格模式是限制性更强的JavaScript变体,它与常规JavaScript的语义不同,其分析更为严格。
?
目前,除了IE6-9,其它浏览器均已支持ES5严格模式。
?
一、严格模式的使用
严格模式的使用很简单,只有在代码首部加入字符串 ?use strict。有两种应用场景,一种是全局模式,一种是局部模式。
1)全局模式
1
2
3 use strict
var?globalVal = 100
console.log(globalVal) 执行后输出了100,与非严格模式没什么区别。
?
2)局部模式
将use strict放到函数内的第一行,如下
1
2
3
4
5
6 function?func() {
????use strict
????var?localVal = 200
????console.log(localVal)
}
func() 执行后输出了200,与非严格模式也没用什么区别。
?
3)模块模式
如果你想定义一个模块或者一个小库,自然采用一个匿名函数自执行是不错的选择
1
2
3
4
5 ~function() {
????use strict;
??????
????// Define your library strictly...
}(); ?
“use strict” 的位置是很讲究的,必须在首部。首部指其前面没有任何有效js代码。以下都是无效的,将不会触发严格模式。
a)“use strict” 前有代码
1
2
3 var?width = 10
use strict
globalVar = 100 ?
b)“use strict” 前有个空语句都不行
1
2
3 ;
use strict
globalVar = 100 或
1
2
3
4
5 function?func() {
????;
????use strict
????localVar = 200
} 或
1
2
3
4 function?func() {
????;use strict
????localVar = 200
}
当然,“use strict”前加注释是可以的
1
2
3 // strict mode
use strict
globalVar = 100 或
1
2
3
4
5
6 function?func() {
????// strict mode
????use strict
????localVar = 200
}
func() ?
?
二、严格模式下的执行限制
上面举的两个例子,在严格模式中输出与普通模式没用什么区别。下面就不一样了。
?
1)不使用var声明变量严格模式中将不通过
我们知道JS是弱类型,宽松的语言。不使用var声明的变量默认转为全局变量。但在严格模式中将不允许,会报语法错误。
1
2 use strict
globalVal = 100 执行,Firebug提示如下
?
又如全局的for循环
1
2
3
4 use strict
for?(i=0; i5; i++) {
????console.log(i)
} 这种写法在非严格模式中很危险,i 会不小心溢出成为全局变量。但在严格模式中会报错
?
局部模式
1
2
3
4
5
6 function?func() {
????use strict
????localVal = 200
????console.log(localVal)
}
func() 执行,Firebug报错
因此,严格模式中声明变量务必记得加一个var。
?
2)任何使用eval的操作都会被禁止
1
2
3
4
5
6
7
8
9 use strict
var?obj = {}
var?eval = 3
obj.eval = 1
obj.a = eval
for?(var?eval?in?obj) {}
function?eval() {}
function?func(eval) {}
var?func =?new?Function(eval) Firebug报错
?
3)eval作用域
JS中作用域有两种,全局作用域和函数作用域。严格模式带来了第三种作用域:eval作用域,如下
1
2
3
4 use strict
var?a = 10
eval(var a = 20; console.log(a))
console.log(a) Firebug控制台依次输出了20,1
您可能关注的文档
- 2015有机化学高考试题.doc
- 2015高一下第一次月考.doc
- 2015级康治疗学本科(康复评定学及新进展)三次作业.doc
- 2015普宁二中综合题原因类练习.doc
- 2015电磁学习题磁场部分.doc
- 2015高考语文模拟题及解析_2015年福建高考语文模拟题及解析.doc
- 2015版高中生物人教版考前三个月知识专题强化练习9人和动物的生命调节.docx
- 2016201701办公自动化练习题B.doc
- 20160105深圳市桥梁边坡管理系统上线运行工作指引.doc
- 20162小蒲午托部春季食谱(新四).doc
- [普洱]2024年云南普洱市融媒体中心急需紧缺人才招聘8人笔试历年高频考点(难、易错点)附带答案详解.docx
- [普洱]2024年云南普洱市人力资源和社会保障局招聘城镇公益性岗位工作人员笔试历年高频考点(难、易错点)附带答案详解.docx
- [普洱]2023年云南普洱景谷县威远镇卫生院编外专业技术人员招聘6人笔试历年高频考点(难、易错点)附带答案详解.docx
- [普洱]2024年云南普洱宁洱县医疗卫生事业单位急需紧缺人才招聘11人笔试历年高频考点(难、易错点)附带答案详解.docx
- [普洱]2024年云南普洱孟连县医疗卫生事业单位急需紧缺人才招聘6人笔试历年高频考点(难、易错点)附带答案详解.docx
- [晋城]山西晋城市残疾人联合会党组引进高层次人才笔试历年高频考点(难、易错点)附带答案详解.docx
- [晋城]山西晋城市文化和旅游局党组引进高层次人才10人笔试历年高频考点(难、易错点)附带答案详解.docx
- [普洱]云南普洱墨江哈尼族自治县审计局招聘驾驶员笔试历年高频考点(难、易错点)附带答案详解.docx
- 江西省九江市修水县2023-2024学年八年级下学期6月期末语文试题.docx
- 新版标准日本语初级下册语法总结.docx
最近下载
- 三年级下册口算天天100题(A4打印版).pdf
- 青岛版数学八年级上整册(同步课时训练+综合提升训练+章末专题训练+各单元测试卷+期中期末测试卷,PDF版).pdf
- 人教版四年级上册数学第三单元《角的度量》测试卷及参考答案一套.docx
- 小学英语 It s not easy to be a mother 课件.pptx VIP
- 一年级下册美术《介绍我喜欢的玩具》公开课教案.docx
- 苏教版五年级上册数学全书课件.ppt
- 信息技术微能力A5 小学数学《摆一摆 想一想》课堂导入案例.docx
- 《My favourite colour》教学设计教学目标.doc
- (苏教版)小学数学五年级下册暑假作业设计.doc
- SKF轴承选型样本-2019.pdf
文档评论(0)