تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ محسن رضوی
دوتا سوال در مورد Lexical
جامعه ری اکت ایجاد شده در ۲۰ اسفند ۱۴۰۰

سلام وقت بخیر دوتا سوال داشتم.

1) اگر داخل فانکشن innerFunction دوباره یک فانکشن دیگری را return کنیم آیا بازم هم به اسکوپ outerFunction دسترسی دارد؟ منظورم اینکه lexical‌ها مختص به این هستن که یک فانکشن داشته باشیم و فانکشن دیگری در اسکوپش تعریف کنیم یا میتوان این داشتن فانکشن دیگری در داخل اسکوپ والد یا همان اولین فانکشن را بار‌ها تکرار کنیم؟

2) سوال دوم در مورد مثال دوم در آخر جلسه هست ، اگر در داخل فانکشن getAdder ما lexical فانکشنی را نمینوشتیم در خط 33 هم نمیتوانستیم adder را به صورت روبرو لاگ بگیریم => consol.log(adder(5)) درسته؟ یعنی در اصل پارامتر عدد 5 داره برای لکسیکال فانکشن و آرگومان number ارسال میشه درسته؟

3) اینجا یه نکته میگم اگر درست متوجه شدم این هم تایید بفرمایید در اصل ما زمانی میتونم دوباره adder5 را invoke کنیم که یه lexical فانکشنی داشته باشه درسته؟

لطفا شما هم قبل از پاسخ عدد سوال را بزنید که بهتر متوجه جوابتون بشم :) ممنونم

1- اگر منظور از سوالتون حالت‌ها زیر هست توابع داخلی هم دسترسی دارن

function outer() {
    let x = 2;
    return function firstLevel() {
        return function secondLevel() {
            console.log(x);
        }
    }
}
outer()()() // 2
function outer2() {
    let x = 100;
    function firstLevel() {
        return function secondLevel() {
            console.log(x);
        }
    }
    firstLevel()();
}
outer2() // 100
بهترین پاسخ
مجتبی سوری ۲۱ اسفند ۱۴۰۰، ۲۰:۵۰

۲ - مقدار ۵ به عنوان number ارسال میشه

۳ - در داخل تابع getAdder چیزی که return میشه یک تابع هست و هیچ تفاوتی با این نداره که ما یک تابع رو به صورت معمولی تعریف کرده باشیم پس این امکان رو داریم هر تعداد که نیاز باشه اون رو فراخوانی بکنیم. فقط تفاوتی که اینجا هست به مقادیر getAdder هم دسترسی داره

مجتبی سوری ۲۱ اسفند ۱۴۰۰، ۲۱:۰۰