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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值