Middle+
Ի՞նչ կցուցադրվի կոնսոլում, երբ typeof a և typeof b կանչենք դուրս ֆունկցիայից, որը ինքնակոչ է (IIFE) և օգտագործում է var: Ինչպե՞ս կփոխվի վարքագիծը խիստ ռեժիմում։
sobes.tech AI
Պատասխան AI-ից
Եթե ներսում IIFE-ի մեջ փոփոխականներ են հայտարարված var-ով, օրինակ՝
(function() {
var a = 10;
b = 20; // առանց var
})();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number"
Փոփոխական a, որը հայտարարված է var-ով ֆունկցիայի ներսում, տեղական է և դուրս չի հասանելի, այդ պատճառով typeof a կվերադարձնի "undefined":
Փոփոխական b, որը հայտարարված է առանց var, let կամ const, ոչ-ստրիկ ռեժիմում, հանգեցնում է գլոբալ փոփոխականի ստեղծման: Այդ պատճառով, typeof b կվերադարձնի "number":
Ստրիկ ռեժիմում ('use strict';), անհայտ փոփոխականին արժեք նշանակելու փորձը (b = 20;) կհանգեցնի ReferenceError-ի, և գլոբալ փոփոխականը չի ստեղծվի: Այսպիսով, ֆունկցիայի դուրս երկու փոփոխականներն էլ չեն հասանելի, և typeof a և typeof b կվերադարձնեն "undefined" (կամ նախապես կբացառվի սխալ):