var foo = "bar";
new Func<String>(() =>
{
var foo = ""; // This can't be done in C#. Why is that?
/* In JavaScript, this is perfectly valid, since this scope (the anonymous
function) is disconnected from the outer scope, and any variable declared
within this scope will not affect variables in the outer scope */
})()
Q
C#匿名函數範圍
3
A
回答
13
其實,即使在javascript中,它也不會完全斷開的; javascript允許使用詞法關閉 - 因此如果沒有var
,foo
的舊值應仍可用。
區別在於javascript 選擇以允許您用不同的含義重新聲明該名稱(在內部範圍內)。 C#不選擇。
我覺得C#版本不太容易混淆!特別是當代碼(在方法中更深入)期望討論「舊」變量時,突然開始查看「新」變量。
4
C#捕獲匿名函數中的局部變量。這實際上是JavaScript也支持的一個非常強大的功能,但方式稍有不同。
這個概念是計算機科學家稱之爲closure。通過捕獲局部變量,它們可以成爲函數本身狀態的一部分,從而爲您提供更多的靈活性。
0
由於代碼將兩個符號都引用爲「本地」,編譯器無法簡單地通過上移作用域鏈(本地 - >成員 - >類型)來發現您指的是哪個。如果您有任何疑問或建議,請聯繫我們,我們會盡快與您聯繫。
相關問題
- 1. PHP匿名函數範圍問題
- 2. Javascript範圍內的匿名函數
- 3. 匿名函數的變量範圍
- 4. 匿名函數範圍混淆
- 5. Ajax響應和匿名函數範圍
- 6. jQuery ajax成功匿名函數範圍
- 7. JavaScript的匿名函數範圍
- 8. 匿名函數變量範圍[js,ajax]
- 9. JS匿名範圍
- 10. ActiveRecord匿名範圍
- 11. C#中的匿名函數內變量的範圍
- 12. 使用匿名。匿名的名稱空間函數。命名空間範圍
- 13. 在PHP中使用匿名函數訪問父函數範圍
- 14. 範圍和匿名方法
- 15. C++函數範圍
- 16. 從匿名函數範圍提取數據
- 17. 具有匿名函數的變量和閉包範圍
- 18. 插入JavaScript代碼放到匿名函數範圍
- 19. addEventListener匿名函數中的Javascript變量範圍
- 20. 如何獲得Javascript匿名函數的「this」(範圍)?
- 21. 可變範圍和事件觸發的匿名函數
- 22. 將父範圍添加到匿名函數 - JavaScript到Angular 2
- 23. JavaScript中的匿名函數的範圍問題
- 24. 匿名函數中JS變量的範圍是什麼
- 25. 從匿名函數內訪問類範圍
- 26. PHP中的靜態匿名函數的意外範圍
- 27. 爲什麼匿名函數會丟失對象範圍?
- 28. $範圍功能沒有定義(匿名函數)
- 29. 具有範圍問題的匿名函數調用
- 30. 如何將範圍變量傳遞給匿名函數