majid
5 سال پیش توسط majid مطرح شد
4 پاسخ

dynamic scoping

سلام دوستان چطور میشه dynamic scoping رو در جاوااسکریپت پیاده سازی کرد؟


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

سلام فکر کنید من متوجه dynamic scoping نشدم و ممنون میشم توضیحش بدید


majid
تخصص : node.js developer
@michael 5 سال پیش آپدیت شد
0

بعنوان مثال کد زیر رو در نظر بگیریم :

function f()
{
    console.log(x);
}
function g()
{
    var x=3;
    f();
}
var x=5;
g();

الان در این کد نتیجه ای که لاگ کرفته میشود برابر ۵ هستش (lexical scoping or static scoping)درحالیکه اگر ۳ لاگ گرفته میشد (dynamic scoping) جاوااسکریپت dynamic scoping رو ساپورت میکرد اما متاسفانه جاوااسکریپت هم مثل بیشتر زبون ها اینو ساپورت نمیکنه و فقط با یه سری کلک ها میتونه اونو تقلید کنه .مثل کد زیر:

function f()
{
    console.log(this.x);
}
function g(){
    this.x=3;
    f.call(this);
}
var x=5;
var t=new g();

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

این جمله مقداری جابجاست بنظرم

  • جاوااسکریپت dynamic scoping رو ساپورت میکرد اما متاسفانه جاوااسکریپت هم مثل بیشتر زبون ها اینو ساپورت نمیکنه

در مورد این موضوع هم اتفاقا همین موضوع درست تره چون چیزی که در block ای تعریف شده نباید از خارج از block اش قابل دسترس باشه که اگر باشه میتونه کلی تداخل ایجاد کنه در یک برنامه و همه چیز رو بهم بریزه


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

حرف آقای موسوی کاملا صحیحه. حتی IIFE (Immediately Invoked Function Expression) ها هم برای حل مشکل scope ها ارائه شدند.


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

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