以下代码似乎有问题。
它用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 }定义了一个局部变量,其他函数无法访问它。它在外部块中起作用的原因是因为它是一个全局变量,并且可以由其他函数访问。

09-26 16:11