(function(){
eval("var x = 10;");
// 非严格模式下,x为10
// 严格模式下,x没有声明,抛出一个错误
alert(x);
}());
任意由eval()创建的变量或函数仍呆在eval()里。然而,你可以通过从eval()中返回一个值的方式实现值的传递:
复制代码 代码如下:
(function(){
var result =eval("var x = 10, y = 20; x + y");
// 严格模式与非严格模式下都能正常工作(得到30)
alert(result);
}());
不可改变引发的错误(Errors for immutables)
ECMAScript 5 同时引入了修改属性特征的能力,例如设置一个属性为只读或者冻结整个对象的结构(freezing an entire object's structure)。在非严格模式下,试图修改一个不可变的属性时将悄无声息地失败。你可能在使用一些原生APIs的时候已经遇到这类问题。严格模式将 保证无论你在何时试图使用一种不被允许的方式修改一个对象或对象的属性时抛出错误。
复制代码 代码如下:
var person ={};
Object.defineProperty(person,"name"{
writable:false,
value:"Nicholas"
});
// 非严格模式下将悄无声息地失败,严格模式则抛出错误
person.name ="John";
这个例子中,name属性被设置为只读。在非严格模式下,对name的赋值将悄无声息地失败;而在严格模式下,一个错误将被抛出。
注:如果你在使用ECMAScript属性能力(the ECMAScript attribute capabilities),我强烈推荐你开启严格模式。如果你在改变对象的可变性(mutability of objects),你将遇到一堆错误,而它们在非严格模式下将被安静地带过。
您可能感兴趣的文章: