您的位置:首页 > Web前端 > JavaScript

JavaScript之严格模式 "use strict";

2016-05-06 16:38 761 查看
严格模式就是在代码片段的顶部加上一个字符串常量的语句"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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: