以下代码似乎有问题。
它用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
最佳答案
因为eval
的行为就像您用要评估的代码替换了该行。因此,var isTwo = function(value) { return value == 2 }
定义了一个局部变量,其他函数无法访问它。它在外部块中起作用的原因是因为它是一个全局变量,并且可以由其他函数访问。