تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ Helen
اشکال در مثال آخر
جامعه جاوا اسکریپت ایجاد شده در ۱۱ آذر ۱۴۰۰
<p>سلام وقت بخیر</p><p>در مثال آخر دقیقا داره چه اتفاقی می‌افته؟ طبق توضیحات مگه نباید وقتی ask1 رو لاگ می‌کنیم، نتیجه 2+2 رو ببینیم؟ پس چرا وقتی من 4 رو به عنوان ورودی تابع ()next نمیدم و برای بار دوم بدون ورودی فراخوانی می‌کنم، مقدار undefined چاپ میشه؟ یا هر عدد دیگه ای به جز 4 رو به عنوان ورودی بدم، همون عدد رو لاگ می‌کنه!</p><p>یا مثلا در اون بخش مقایسه ای (generator.next(9).done) من هر عدد دیگه ای به جز 9 به عنوان ورودی میدم، چرا باز هم مقدار true برمی گردونه؟</p><p>اینم از کد:</p><pre class=\"ql-syntax\" spellcheck=\"false\"><span class=\"hljs-keyword\">function</span>* <span class=\"hljs-title function_\">gen</span>() {             <span class=\"hljs-keyword\">let</span> ask1 = <span class=\"hljs-keyword\">yield</span> <span class=\"hljs-string\">\"2 + 2 = ?\"</span>;             <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(ask1); <span class=\"hljs-comment\">// 4</span>             <span class=\"hljs-keyword\">let</span> ask2 = <span class=\"hljs-keyword\">yield</span> <span class=\"hljs-string\">\"3 * 3 = ?\"</span>             <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(ask2); <span class=\"hljs-comment\">// 9</span>         }         <span class=\"hljs-keyword\">let</span> generator = <span class=\"hljs-title function_\">gen</span>();         <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(generator.<span class=\"hljs-title function_\">next</span>().<span class=\"hljs-property\">value</span>); <span class=\"hljs-comment\">// \"2 + 2 = ?\"</span>         <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(generator.<span class=\"hljs-title function_\">next</span>(<span class=\"hljs-number\">4</span>).<span class=\"hljs-property\">value</span>); <span class=\"hljs-comment\">// \"3 * 3 = ?\"</span>         <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(generator.<span class=\"hljs-title function_\">next</span>(<span class=\"hljs-number\">8</span>).<span class=\"hljs-property\">done</span>); <span class=\"hljs-comment\">// true</span> </pre>

سلام

وقت شما هم به خیر

یه مقدار خودتون را گیج کردید!

سوال اول: نتیجه لاگ ask1 چی شد؟

سوال دوم: نتیجه این دو تا لاگ چی شد؟

console.log(generator.next().value); // "2 + 2 = ?"
console.log(generator.next(4).value);

سوال سوم: لاگ سوم را به کد زیر تغییر بدید و نتیجه را اینجا بذارید:


console.log(generator.next());


این ۳ تا سوال را جواب بدید تا توضیحات تکمیلی را براتون بگم ....

مهرداد دادخواه ۱۲ آذر ۱۴۰۰، ۱۳:۰۲

ممنون از پاسخگویی. بعد این که گفتید:

سوال اول: نتیجه لاگ ask1 چی شد؟

کنسول لاگ موجود در داخل تابع رو کامنت کردم و دیدم که در خروجی مقدار 4 چاپ نشد. پس فکر کنم که اون 4ی که چاپ شده مربوط به کنسول لاگ داخل تابع و نتیجه 2+ 2 هست. درسته؟


سوال دوم: نتیجه این دو تا لاگ چی شد؟

2 + 2 = ?
4
3 * 3 = ?


سوال سوم: لاگ سوم را به کد زیر تغییر بدید و نتیجه را اینجا بذارید:

2 + 2 = ?
4
3 * 3 = ?
undefined
{value: undefined, done: true}


Helen ۱۲ آذر ۱۴۰۰، ۲۱:۵۷

خب پس ask1 مقدار درستی گرفته (مطابق چیزی که توضیح داده بودم) و سوال اول شما برطرف شد. درسته؟


سوال بعدی: وقتی کد زیر اجرا میشه نتیجه ask2 چیه؟

console.log(generator.next(4).value);


و اما در مورد سوال سوم شما:

اگر دقت کنید نتیجه لاگ آخر

{value: undefined, done: true}


هست. یعنی چی؟ یعنی اینکه به انتهای generator رسیدیم (چون ۲ تا yield داشتیم و قبلش هر ۲ اجرا شدن) در نتیجه از اینجا به بعد مقدار done همواره true خواهد بود که نشان میده iteration ما به انتها رسیده و فرقی نداره چه عددی را به عنوان ورودی به next بدید

سوال سوم تون را جواب دادم درسته؟

مهرداد دادخواه ۱۳ آذر ۱۴۰۰، ۰۶:۳۸

ببینید من الان اگه این کد رو اجرا کنم:

function* gen() {
            let ask1 = yield "2 + 2 = ?";
            console.log(ask1); // 4
            let ask2 = yield "3 * 3 = ?"
            console.log(ask2); // 9
        }
        let generator = gen();
        console.log(generator.next().value); // "2 + 2 = ?"
        console.log(generator.next().value);

مگه نباید در خروجی این رو ببینم:

2 + 2 = ?
4
3 * 3 = ?

یعنی با اجرای :

console.log(generator.next().value); // "2 + 2 = ?"

برای بار اول، خروجی من باید باشه:

2 + 2 = ?

و با اجرای:

console.log(generator.next().value);

برای دومین بار، خروجیم باید بشه:

4
3 * 3 = ?

ولی آخه چرا خروجی من به این شکل درمیاد:

2 + 2 = ?
undefined
3 * 3 = ?
Helen ۱۳ آذر ۱۴۰۰، ۱۳:۳۳

درسته متوجه ابهام و مشکلی که برخوردید شدم

حق با شماست یه مقدار این بخش را بد توضیح دادم، در چند روز آینده اصلاح میکنم تا ابهام شما هم برطرف بشه

مهرداد دادخواه ۱۴ آذر ۱۴۰۰، ۱۱:۵۳

خیلی ممنون بابت پاسخگویی و راهنمایی، لطف می‌کنید

Helen ۱۴ آذر ۱۴۰۰، ۱۳:۱۶