راکت

dynamic scoping

4 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

4
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

majid
majid
@michael

تخصص: node.js developer

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

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

تخصص: طراح و برنامه نویس

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

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

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

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

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