JavaScript之严格模式 "use strict";

来源:互联网 发布:苹果手机游戏推荐 知乎 编辑:程序博客网 时间:2024/06/04 18:49

严格模式就是在代码片段的顶部加上一个字符串常量的语句"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

0 0
原创粉丝点击