निम्नलिखित होता है:
(1) दो परिवर्तनशील घोषणाएँ मौजूद हैं a, एक ब्लॉक के अंदर और एक उसके बाहर।
(2) फ़ंक्शन घोषणा फहराया जाता है, और आंतरिक ब्लॉक चर के लिए बाध्य होता है।
(3) a = 5तक पहुँच जाता है, जो ब्लॉक चर को ओवरराइड करता है।
(4) फ़ंक्शन डिक्लेरेशन तक पहुंच गया है, और ब्लॉक वेरिएबल को बाहरी वेरिएबल में कॉपी किया गया है। दोनों अभी 5 हैं।
(5) a = 0तक पहुँच जाता है, जो ब्लॉक वैरिएबल को ओवरराइड करता है। बाहरी चर इससे प्रभावित नहीं है।
var a¹;
if (true) {
function a²() {} // hoisted
a² = 5;
a¹ = a²; // at the location of the declaration, the variable leaves the block
a² = 0;
console.log(a²)
}
console.log(a¹);
यह वास्तव में विनिर्देश का हिस्सा नहीं है, यह वेब विरासत संगतता शब्दार्थ का हिस्सा है , इसलिए ब्लॉक के अंदर फ़ंक्शन घोषित न करें और इस तरह से व्यवहार करने के लिए इस कोड पर भरोसा न करें ।
यह भी यहाँ बताया गया है