码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript之严格模式 "use strict";

时间:2016-05-07 08:41:14      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

严格模式就是在代码片段的顶部加上一个字符串常量的语句"use strict";(也可以用单引号),它可以是全局的,也可以是局部的(function和eval两种局部作用域)。但是它必须是代码的第一个语句(未必要是第一行)。在它之前如果有任何语句(包括空语句),严格模式的声明就会失效。

"use strict";//全局严格模式function func(){ "use strict"; //局部严格模式};eval(‘"use strict";/*局部严格模式*/‘);;"use strict";//失效的严格模式声明  知道了严格模式的声明,那么它到底要怎么用呢?下面我们一个个功能说明。

  1. 变量必须声明才能使用
"use strict";a=1; //缺少var语句做声明,因此报错"use strict";var a=b=1; //错误 b未声明  2. 函数声明语句(不包括表达式)不允许在普通代码块(不包括闭包)中使用
"use strict";(function(){ //闭包中是允许使用函数声明语句的 function func(){};})();{ var f=function(){}; //函数声明表达式允许 function func(){}; //函数声明语句在普通闭包中,错误};  3. 闭包内的this不指向Global对象
"use strict";(function(){ alert(this); //输出undefined})();  4. 对象属性和函数形参不能重复声明
"use strict";var o={a:1,a:1};//这个对象定义了两个a属性,因此报错"use strict";function func(a,a){};//这个函数的两个形参都是a,因此报错  5. eval拥有类似闭包的作用域
"use strict";var a=1,b=1;eval("var a=2");window.eval("var b=2");alert(a); //输出1 因为运行的a变成了eval作用域的局部变量alert(b); //输出2 window.eval依然是全局作用域  6. callee和caller属性无法使用
"use strict";function func(){ return arguments.callee; //错误 callee无法使用};func();  7. with语句无法使用
"use strict";with({});  8. 八进制数字常量无法使用
"use strict";var a=0999; //十进制,可以使用var b=0123; //八禁止,无法使用  9. 普通模式下的一些无效操作变成错误
"use strict";var a=1;delete a;//错误 无法删除var声明的变量"use strict";var o={get a(){}};o.a=1;//错误 给只读属性赋值  暂时就总结出这些啦,还有一些细节的条款我也描述的不是那么准确,建议看看MDN上的描述。参考:
  MDN Strict_mode

JavaScript之严格模式 "use strict";

标签:

原文地址:http://blog.csdn.net/gmf532196/article/details/51332802

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!