كيف لا يؤدي استدعاء window.init من دالة init عامة إلى تكرار لا نهائي؟

StackOverflow https://stackoverflow.com//questions/21013357

سؤال

إذًا، كيف لا يتكرر هذا الرمز إلى ما لا نهاية؟

window.init = function(){
    console.log("window.init")
}

function init(){
    console.log("init")
    window.init();
}

init();

jsfiddle: http://jsfiddle.net/FAt6C/

هل كانت مفيدة؟

المحلول

تم تعيين التعليمات البرمجية الخاصة بك للتشغيل عند التحميل (انظر المربعات الموجودة في الجزء العلوي الأيسر)، والتي تخبر jsFiddle بشكل أساسي بتغليف هذا الرمز في وظيفة يتم تعيينها بعد ذلك كمعالج عند التحميل. function init() تم الإعلان عنه فعليًا في نطاق معالج الحدث هذا، وليس في النافذة.

حتى عندما لا تقوم بتغليف التعليمات البرمجية، تعمل إعلانات الوظائف بشكل أساسي كجزء من إعداد النطاق الحالي، قبل الأشياء الأخرى في هذا النطاق (ECMA-262، §10.5).لذا init موجود بالفعل قبل أن تقول window.init =..., ، ويكتب بيان المهمة هذا فوق المكسور init.بمعنى أنه إذا قمت بتعيين الالتفاف على "بدون التفاف" (بغض النظر عن الموقع)، فيجب أن تشاهد فقط "window.init" في وحدة التحكم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top