命名函数、eval创建局部变量
1、命名函数
1 var f = function double(){return x *2;} 2 该语句将函数绑定到变量f,而不是变量double 3 匿名的函数表达式: 4 var f = function(x) {return x*2;}
2、关于eval创建局部变量
1 var y = "global"; 2 function test(x){ 3 if (x) { 4 eval("var y = 'local';"); 5 }; 6 return y; 7 } 8 test(true); // "local" 9 test(false); // "global"
1 var y = "global"; 2 function test(src){ 3 eval(src); 4 return y; 5 } 6 test("var y = 'local';"); // "local" 7 test("var z = 'local';"); // "global"
1 var y = "global"; 2 function test(src){ 3 (function(){eval(src);})(); 4 return y; 5 } 6 test("var y = 'local';"); // "global" 7 test("var z = 'local';"); // "global"
eval函数具有访问调用它那时的整个函数的作用域,大多数函数只能访问定义它们所在的作用域,而不能访问除此之外的作用域
1 var x = "global"; 2 function test(){ 3 var x = "local"; 4 return eval("x"); 5 } 6 test(); // "local"
绑定eval函数到另一个变量名,通过该变量名调用函数会使代码失去对所有局部作用域的访问能力
1 var x = "global"; 2 function test(){ 3 var x = "local"; 4 var f = eval; 5 return f("x"); 6 } 7 test(); // "global"