簡體   English   中英

評估和功能范圍

[英]Eval and function scope

以下代碼似乎有問題。 它使用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內部使用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 }定義了一個局部變量,其他函數無法訪問它。 它在外部塊中起作用的原因是因為它是一個全局變量,並且可以由其他函數訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM