6
A
回答
5
當您在隱藏一個存在於含有範圍的範圍申報的標識符這是:
var foo; // The outer one
function example() {
var foo; // The inner one -- this "shadows" the outer one, making the
// outer one inaccessible within this function
// ...
}
有幾種方法,你可能會影東西:
用變量聲明(
var
,let
,const
),如上隨着參數聲明:
var foo; // The outer one function example(foo) { // This parameter shadows the outer `foo` // ... }
與函數聲明:
var foo; // The outer one function example() { function foo() { // This shadows the outer `foo` } // ... }
...和其他幾個人。任何在隱藏範圍內聲明標識符的東西(陰影)在包含範圍中的一個,這是一個影子聲明/定義。
+0
命名函數語句和catch塊也可以屏蔽外部變量。 – lonesomeday
2
維基百科定義(https://en.wikipedia.org/wiki/Variable_shadowing):
在計算機程序中,當在一定的範圍(判定框,方法,或內 類)內聲明的變量 具有相同的名稱作爲一個變量發生可變遮蔽在外部範圍內聲明。在 標識符的級別(名稱,而不是變量),這被稱爲 作爲名稱掩碼。據說這個外部變量被 內部變量所遮蔽,而內部標識符被認爲掩蓋了外部標識符 。這可能會導致混淆,因爲可能不清楚哪個 變量後續使用影子變量名引用,哪個 依賴於該語言的名稱解析規則。
Java示例:
public class Shadow {
private int myIntVar = 0;
public void shadowTheVar(){
// since it has the same name as above object instance field, it shadows above
// field inside this method
int myIntVar = 5;
// If we simply refer to 'myIntVar' the one of this method is found
// (shadowing a seond one with the same name)
System.out.println(myIntVar);
// If we want to refer to the shadowed myIntVar from this class we need to
// refer to it like this:
System.out.println(this.myIntVar);
}
public static void main(String[] args){
new Shadow().shadowTheVar();
}
}
0
對於你的問題考慮這個代碼
function foo(a) {
var b = 2;
// some code
function bar() {
// ...
}
// more code
var c = 3;
}
在這個片段中,當您嘗試從全局範圍內執行。
bar(); // fails
console.log(a, b, c); // all 3 fail
在功能欄中(假設){....}如果你有其他代碼等
function foo(){
var b = 3;
console.log(b);
}
那麼就意味着foo的linside杆被遮蔽foo的(a)中在全球範圍
相關問題
- 1. CoInitialize爲什麼是未聲明的標識符?
- 2. 已聲明的未聲明標識符?
- 3. 爲什麼我在Xcode中看到「未聲明的標識符」?
- 4. 「未聲明的標識符」實際上是聲明的
- 5. 未聲明標識符:Memo1?
- 6. 缺少聲明標識符
- 7. C++未聲明標識符
- 8. 未聲明標識符
- 9. CStdioFile未聲明標識符
- 10. 未聲明標識符FIRAuth
- 11. 未聲明標識符
- 12. xCode 5中未聲明的標識符
- 13. Delphi中的未聲明標識符AccessibleObjectFromEvent
- 14. 爲什麼GKPlayerAuthenticationDidChangeNotificationName一個「未聲明的標識符」
- 15. 「使用未聲明的標識符」 - 代碼有什麼問題?
- 16. 未聲明的標識符 - 不確定爲什麼
- 17. 在JavaScript中,「聲明職位」是什麼?
- 18. 未聲明的標識符目標C
- 19. 字符串未聲明的標識符
- 20. 字符||的作用是什麼?在JavaScript中的變量聲明?
- 21. 爲什麼委託聲明需要提到標識符?
- 22. JavaScript函數聲明中$操作符的用途是什麼?
- 23. 爲什麼Xcode說「窗口」是一個未聲明的標識符?
- 24. iOS:爲什麼NSRange總是拋出錯誤「使用未聲明的標識符」?
- 25. C語言中的聲明符說明符是什麼?
- 26. 聲明瞭copy_from_user()的標題是什麼?
- 27. 'USB_Close':標識符未找到...'len':未聲明的標識符...
- 28. 使用未聲明的標識符的
- 29. OpenCV的: 'BruteForceMatcher':未聲明的標識符
- 30. 的UIViewController:未聲明的標識符
有* shadowing *,但「影子標識符聲明」不是一個固定的術語。 – Bergi