命名函数、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"

 

posted @ 2016-09-18 10:02  ^^-^^-  阅读(429)  评论(0编辑  收藏  举报