Czytałem o zawieszeniu JavaScriptu kiedyś z powrotem.Zrozumienie obsługi JavaScriptu i prawdy i fałszu
JavaScript Scoping and Hoisting by Ben Cherry
Two words about “hoisting” by Dmitry Soshnikov
, a niektóre więcej o JavaScript typu przymus, prawdy & fałszywe badania: Truth, Equality and JavaScript i innego zasobu
I podczas uprawiania niektórych, i stwierdził, że jestem brakuje jakiegoś ważnego pojęcia o podnoszeniu i zmiennym "truey & falsy.
1: 'jeśli' test prawdy z duplikatu deklaracji zmiennej
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
O/P: inside if
Doubt: wartość 'foo' bycia '1', if(!foo)
powinny ocenia się false
i ten blok nie powinien być wykonywany (cytując z powyższych zasobów: podnoszenie dotyczy tylko deklaracji var
, ale nie wykonania). Ale dlaczego ten alert jest wyświetlany. To nie jest przypadek, gdybym bezpośrednio korzystać false
(pokazany na poniższym bez-tricków Kod: snippet # 3)
2: 'jeśli' test prawdy bez duplikatu deklaracji zmiennej
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
O/P : brak danych wyjściowych; środki kontrolne nie wszedł 'if' blok
To, co można było oczekiwać
3: 'jeśli' za pomocą 'false' z duplikatu deklaracji zmiennej
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
O/P: bez wyjścia; oznacza, że kontrola nie została wprowadzona blok "jeśli"
Oto, czego można się spodziewać:
Ktoś proszę wyjaśnić. Dziękujemy
Moja zła. W ogóle nie miałem nic przeciwko tej funkcji. Koncentruję się tylko na przymusie i dźwiganiu (obracają się w mojej głowie). Jeśli zduplikowana deklaracja nie znajduje się w funkcji, to "foo" będzie miało poprzednią wartość (1) nawet po drugiej deklaracji. To całe myślenie sprawiło, że tęskniłem za używaną funkcją. Dziękuję za otwarcie mojego oka :) – manikanta
Dlaczego nie ma wtedy trzech zadań? jeśli zmienna jest niezdefiniowana, oznacza to jej fałsz? – bill