Podczas czytania a JavaScript article natknąłem się na to określenie "Deklaracja Cienia". Czy ktoś może wyjaśnić, co to jest? Jeśli to możliwe, podaj również prosty przykład.Co to jest "deklaracja Shadow Identifier" w JavaScript?
Odpowiedz
To kiedy deklarujesz identyfikator w zakresie, który ukrywa się jeden, który istnieje w zakresie zawierających:
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
// ...
}
Istnieje kilka sposobów można cień coś:
O zmiennej deklaracji (
var
,let
,const
), jak wyżejZ deklaracji parametrów:
var foo; // The outer one function example(foo) { // This parameter shadows the outer `foo` // ... }
Z deklaracji funkcji:
var foo; // The outer one function example() { function foo() { // This shadows the outer `foo` } // ... }
... i kilka innych. Wszystko, co deklaruje identyfikator w zakresie, który ukrywa (cienie) jeden w zakresie zawierającym, to deklaracja/definicja cieniowania.
Nazwane instrukcje funkcyjne i bloki catch mogą również maskować zmienne zewnętrzne. – lonesomeday
Wikipedia definicja (https://en.wikipedia.org/wiki/Variable_shadowing):
W programowaniu komputerowym, przesłanianie występuje, gdy zmienna ogłoszony w pewnym zakresie (bloku decyzyjnego, metody lub wewnętrznej klasy ) ma taką samą nazwę jak zmienna zadeklarowane w zewnętrznym zakresie. Na poziomie poziom identyfikatorów (nazw, a nie zmiennych) jest znany jako jako maskowanie nazwy. Uważa się, że ta zewnętrzna zmienna jest zacieniona przez wewnętrzną zmienną , podczas gdy wewnętrzny identyfikator jest maskowany zewnętrznym identyfikatorem . Może to prowadzić do nieporozumień, ponieważ może być niejasne, które zmienne kolejne zastosowania nazwy zmiennej w tle odnoszą się do tego, która z nich zależy od reguł rozpoznawania nazw języka.
przykład 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();
}
}
za pytanie rozważyć ten kod
function foo(a) {
var b = 2;
// some code
function bar() {
// ...
}
// more code
var c = 3;
}
W tym fragmencie, kiedy starają się wykonać od zasięgu globalnym.
bar(); // fails
console.log(a, b, c); // all 3 fail
Załóżmy na pasku function() {....} Jeśli masz inny kod jak
function foo(){
var b = 3;
console.log(b);
}
wtedy oznacza to, że foo linside barze jest shadowing foo (a) w globalny zakres
- 1. Co to jest substytut :: shadow i/deep /?
- 2. Haskell- (typ deklaracja) co to jest "a"?
- 3. Co to jest deklaracja przekazania parametru?
- 4. Co to jest === w javascript?
- 5. Co to jest {} + {} w JavaScript?
- 6. Co to jest "" w JavaScript naprawdę?
- 7. Co to jest dokładnie znaczenie "===" w javascript?
- 8. Co to jest "this" w JavaScript onclick?
- 9. Co to jest węzeł w JavaScript?
- 10. Co to jest definicja ([, funkcja]) w JavaScript?
- 11. Co to jest prekompilacja szablonu javascript?
- 12. Obiekt JavaScript "Counter", co to jest?
- 13. Reset konstruktora javascript: co to jest?
- 14. Co to jest skrótu javascript dla tego?
- 15. Co to jest JavaScript o niskim poziomie?
- 16. co to jest Array.any? dla javascript
- 17. Co to jest funkcja javascript `emit`?
- 18. W JavaScript co to jest „” w ramach warunkowego
- 19. Co to jest obiekt w C?
- 20. Co to jest Serializable? Co to znaczy?
- 21. Co to jest wydarzenie, aby złapać przesyłanie formularzy w JavaScript?
- 22. Co to jest ".el" w związku z JavaScript/HTML/jQuery?
- 23. Co to jest (funkcja e (t, n, r) {...}) w JavaScript?
- 24. co to jest $ .expr [":"] w javascript lub jQuery?
- 25. Co to jest proc i metoda w reakcji na javascript?
- 26. Co to jest "zdefiniować" używane w JavaScript (oprócz oczywistych)?
- 27. Co to jest surrogate typu __proto__ w JavaScript?
- 28. Co to jest operator >>> = w JavaScript?
- 29. Co to jest DOM i BOM w JavaScript?
- 30. Co to jest "usuń to"?
Istnieje * shadowing *, ale "Shadow Identifier Declaration" nie jest ustalonym terminem. – Bergi