PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : export کردن تابع و متغییر در es6



<?php?>
April 11th, 2019, 15:46
به کد زیر توجه کنید :

فایل style2.js ::::::::::




var a=20;

var num=30;
function num(){
alert('hi');
}

export {a,num}



فایل style.js :::::




import * as style2 from './style2';

style2.num(); // کار نمیکنه

alert(style2.num); // کار میکنه





من یک متغییر با نام num و یک تابع با نام num دارم ( هم نام هستند :39: )

وقتی داخل style2.js اطلاعات style.js رو import میکنم , فقط میتونم از متغییر num استفاده کنم و نمیتونم از تابع num استفاده بکنم .

چون اسم تابع و متغییر هم نام هست مشکل ایجاد میشه


تشکر از دوستان

T.Toosi
April 11th, 2019, 18:01
باسلام، برای درک این موضوع ابتدا باید با رفتار hoisting در جاوا اسکریپت آشنا باشید سپس باید بدانید در بالای scope ابتدا function ها سپس variable ها ساخته و تعریف می شوند به همین دلیل num شما overwrite و مقدار 30 را گرفته.

<?php?>
April 12th, 2019, 18:04
باسلام، برای درک این موضوع ابتدا باید با رفتار hoisting در جاوا اسکریپت آشنا باشید سپس باید بدانید در بالای scope ابتدا function ها سپس variable ها ساخته و تعریف می شوند به همین دلیل num شما overwrite و مقدار 30 را گرفته. ممنون بابت پاسختون . راهکاری وجود داره که من بتونم تابعی با نام num و هم متغییری با نام num داشته باشم و بتونم از هردوشون استفاده بکنم ؟ درواقع در php این امکان وجود داره یعنی شما یک متغییر با نام num و یک تابع با نام num میسازید > هر وقت نوشتید num() تابع صدا زده میشه و هر وقت گفتید num متغییر صدا زده میشه .

T.Toosi
April 12th, 2019, 22:12
ممنون بابت پاسختون . راهکاری وجود داره که من بتونم تابعی با نام num و هم متغییری با نام num داشته باشم و بتونم از هردوشون استفاده بکنم ؟ درواقع در php این امکان وجود داره یعنی شما یک متغییر با نام num و یک تابع با نام num میسازید > هر وقت نوشتید num() تابع صدا زده میشه و هر وقت گفتید num متغییر صدا زده میشه .

باسلام، در جاوا اسکریپت همه چی object است و با php تفاوت دارد، پی اچ پی به قول معروف fully object oriented نیست و فقط feature هایی مثل class، object, constructors, destructors و .. را پشتیبانی می کند. در نتیجه تنها راهی که شما دارید یک چیزی مثل زیر است :


var a=20;
function num(){
alert('hi');
}
num.num=30
export {a,num}


import * as style2 from './style2';
style2.num();
alert(style2.num.num);