(function(){
//非严格模式
a = 10;
console.log(a); //10
})();
(function(){
"use strict"; //严格模式
b = 10; //ReferenceError: b is not defined
console.log(b);
})();
(function(){
"use strict"; //严格模式
var a=b=1;// //ReferenceError: b is not defined
console.log(a,b)
})();
(function(){
//非严格模式
var str1 = "var name='Lily';";
var str2 = "function fun1(){console.log('hello');}";
eval(str1); //这个name定义在了全局,而不是函数内
eval(str2);
console.log(name); //Lily
fun1(); //hello
})();
(function(){
"use strict"; //严格模式
var str1 = "var alias='Lily';";
var str2 = "function fun2(){console.log('hello');}";
eval(str1);
eval(str2);
eval("name = 'Bob'"); //修改全局变量name
console.log(name); //Bob
console.log(alias); //ReferenceError: alias is not defined
fun2(); //ReferenceError: fun is not defined
})();
4.在严格模式下,有名参数是arguments参数的静态副本,而非引用。
(function(){
//非严格模式
var name = "Bob";
test(name);
function test(alias){
alias = "Lily";
console.log(alias); //Lily
console.log(arguments[0]); //Lily
}
})();
(function(){
"use strict"; //严格模式
var name = "Bob";
test(name);
function test(alias){
alias = "Lily";
console.log(alias); //Lily
console.log(arguments[0]); //Bob
}
})();