مولائی
2 سال پیش توسط مولائی مطرح شد
3 پاسخ

دسترسی به متغیرهای لوکال بیرون از resizeObserver

سلام
این قطعه کد من هستش:

  const container = $("#contacts")[0];
  const div = $(".scrollable.scrollable-y")[5];

  let resizeObserver = new ResizeObserver((entries) => {
     for (entry of entries) {
         div.scrollTop = div.scrollHeight;
         var val = div.scrollHeight;
     }
  });

  resizeObserver.observe(container);

  console.log('The global variable is: ' + val);

سوال اینجاست که پس از اجرای کد مقدار val رو udefined نشون میده، به عبارت دیگه انگار این ، یک متغیر داخل فضای داخلی لوپ هست و دسترسی از بیرون بهش غیر ممکنه. چه طور ی میشه بهش دسترسی داشت؟
تشکر


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 2 سال پیش آپدیت شد
0

خب شما باید موقعی اون المنت سایزش تغییر میکنه یعنی همونجا که val رو مقداردهی میکنید لاگ بگیرید. مشخصه js یک بار اجرا میشه و هر بار اول لاگ میگیره که undefined هست و اصلا این اشتباهه. شما میتونید مثلا interval بذارید و هر 2 ثانیه چک کنید از بیرون به این شکل

const container = $("#contacts")[0];
const div = $(".scrollable.scrollable-y")[5];
let val = undefined;

let resizeObserver = new ResizeObserver((entries) => {
 for (entry of entries) {
     div.scrollTop = div.scrollHeight;
     console.log(div.scrollHeight)
     val = div.scrollHeight;
 }
});

resizeObserver.observe(container);

setInterval(() => {
    console.log('The global variable is: ' , val);
}, 1000)

علی
تخصص : مهندس کامپیوتر
@Alimomeni1380 2 سال پیش مطرح شد
0

مقدارش رو نمیتونه پیدا کنه ک undefined برمیگرونه بهتره بالا قبل فور آف مقدار بهش بدی مثلا یه کوتیشین باز کنی و مقدار داخلش رو اسپیس بزاری و بعد داخل تابع خودت اون رو مقدار بدی وقتی مستقیم بهش مقدار بدی و بخایی ازش مقدار بگیری چون یکبار این کارو انجام میده به مشکل میحوره
سورس کدی که جناب شاه اویسی قرار دادن کاملا درسته و مشکلتون رو حل میکنه


مولائی
@molaeiabbas08 2 سال پیش مطرح شد
0

ممنون از دو گرامی و جناب اویسی
بله لاگ گیری در همون زمان رو خودم دارم و مشکلی نیست و در اون صورت اصلا نیاز به اینتروال هم نیست اما نکته اینجاست که در اینجا ما آخرین متغیر رو لازم داریم از بیرون داشته باشیم. در حقیقت مشکل اینجاست که با اتمام کار این تابع، تمامی متغیرها و از جمله آخرین از بین میرن و در عین حال ما به آخرین مقدار نیاز داریم. ظاهرا کد هم کار نمی کنه و مقدار رو نامعلوم میزنه.
فرض کنید بخوایم آرایه ای از تمام این val ها داشته باشیم و در ضمن این آرایه رو از بیرون از تابع بخوایم به دست بیاریم، چه باید کرد؟


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

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