Sobes.tech
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" (կամ նախապես կբացառվի սխալ):