Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

JavaScript的严格模式 "use strict"

  严格模式就是在代码片段的顶部加上一个字符串常量的语句"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
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^