以下代码似乎有些问题。
它声明了一个带有eval
的函数,调用它 - 直到那时,一切都很好 - 再次调用它,但是,虽然是一个函数,因此会出错。
var fn = function() {
return isTwo(2);
};
var check = function() {
eval("var isTwo = function(value) { return value == 2 }")
console.log(isTwo(2)); // returns true
console.log(fn()); // returns isTwo is not defined
}
check();
展开check
函数使事情有效,但似乎错了。为什么在函数内部使用eval
应该改变它的行为?
var fn = function() {
return isTwo(2);
};
eval("var isTwo = function(value) { return value == 2 }")
console.log(isTwo(2)); // returns true
console.log(fn()); // returns true
答案 0 :(得分:2)
因为eval
的行为就好像您已将该行替换为要评估的代码。因此,var isTwo = function(value) { return value == 2 }
定义了本地变量,并且您的其他功能无法访问该变量。它在外部块中工作的原因是因为它是全局变量,并且可以由您的其他函数访问。