بهزاد عزیزان
4 سال پیش توسط بهزاد عزیزان مطرح شد
3 پاسخ

سوال در مورد تعریف متغیر با let

سلام وقتتون بخیر
من الان به یه موضوعی برخورد کردم که به نظرم به صورت منطقی نباید مشکلی داشته باشه اما مشکل داره!
من با کلمه کلیدی let تو دو تا case مجزا از یک switch یک متغیر همنام تعریف کردم . به این صورت :

switch ('foo') {
    case 'foo' :
        let message = 'This is test'
        break

    case 'bar' :
        let message = 'This is another test!'
        break
}

با وجود اینکه امکان نداره هر دو case با هم اجرا بشن اما بازم وب‌استورم زیر تعریف متغیر های منو قرمز کرده و به نظر ارور وجود داره
اما به نظر من منطقا نباید هیچ مشکلی باشه چون اولا متغیر message توی بلاک خاص خودش تعریف شده و ارتباطی با هم ندارن . دوما اصلا هیچ حالتی پیش نمیاد که هر دو case با هم بخواد اجرا بشه!

اما وب‌استورم برای من خطا گرفته و متن ارور هم اینه :
توضیح تصویر رو وارد کنید

مشکل کجاست به نظرتون؟


ثبت پرسش جدید
آرین حسینی
تخصص : Solidity Developer. Blockchai...
@arian 4 سال پیش آپدیت شد
3

سلام وقت بخیر
شما داخل یک scope دوتا متغیر message تعریف کردید،‌ کل case های شما داخل یک Scope هست.
@behzad.azizan1991

switch ("foo") {
    case "foo": {
        let message = "This is test";
        break;
    }

    case "bar": {
        let message = "This is another test!";
        break;
    }
}

آرمان پرویزی
تخصص : برنامه نویس وب
@parvizi.arman 4 سال پیش مطرح شد
1

سلام
همانطور که دوستمون گفتم کل switch یک scope محسوب میشه و اگر مجبورید از متغیر همنام استفاده کنید باید به ازای هر case یک تابع بنویسید و تابع را در case فراخونی کنید


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
2

من معمولا عملیات تعریف متغیر (declairation) متغیر رو بیرون switch انجام میدم و مقداردهیش (assignment) رو در داخل هر case به تناسب شرایط.

let message;

switch ('foo') {
    case 'foo' :
        message = 'This is test';
        break;

    case 'bar' :
        message = 'This is another test!';
        break;

    default:
    message = 'Unknown';
}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام