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