ES5严格模式.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

您可能关注的文档

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档