[Vue 3] بیان تابع در مقابل اعلان تابع در تنظیم اسکریپت
![[Vue 3] بیان تابع در مقابل اعلان تابع در تنظیم اسکریپت [Vue 3] بیان تابع در مقابل اعلان تابع در تنظیم اسکریپت](https://nabfollower.com/blog/wp-content/uploads/2023/06/Vue-3-بیان-تابع-در-مقابل-اعلان-تابع-در-تنظیم-780x470.jpg)
جاوا اسکریپت عجیب است. اگر بیش از 5 دقیقه را با زبان گذرانده اید، از قبل می دانید. یکی از سختترین موضوعاتی که میتوان به یک مهندس غیر فرانتاند توضیح داد، بیان عملکرد و کل ایده توابع شهروندان درجه یک است.
در Vue، تا همین اواخر، تمام توابع داخل گزینه روش ها اعلام می شد که این بحث را بی ربط می کرد. اما با معرفی Composition API در Vue 3، اکنون اعلام یک تابع به هر دو صورت امکان پذیر است.
بیایید تفاوت ها و اینکه کدام یک باید استفاده شود را بررسی کنیم.
tl;dr همین مورد، از اعلانهای تابع برای خوانایی استفاده کنید
اعلامیه های عملکرد
یک اعلان عملکرد سنتی یا «طبیعی” روشی برای اعلان تابع در زبان های برنامه نویسی غیر کاربردی با کلمه کلیدی تابع شروع می شود و به دنبال آن نام تابع، یک جفت پرانتز و در نهایت یک جفت پرانتز فرفری که بدنه تابع را در بر می گیرد.
در اینجا یک مثال است:
function greet(name) {
console.log(`Hello, ${name}!`);
}
یکی از ویژگی های مهم اعلان های تابع این است که آنها هستند برافراشته شد به بالاترین حد خود. این بدان معنی است که صرف نظر از جایی که اعلان تابع در کد نوشته شده است، برای فراخوانی در هر جایی در محدوده یکسان در دسترس خواهد بود.
مثلا:
greet("stranger"); // prints "Hello, stranger!"
function greet(name) {
console.log(`Hello, ${name}!`);
}
حتی اگر تابع greet() قبل از اینکه در کد تعریف شود فراخوانی میشود، اعلان تابع به بالای محدوده بالا میرود، بنابراین فراخوانی معتبر است و تبریک به کنسول ثبت میشود.
عبارات تابع
از سوی دیگر، یک عبارت تابع عبارتی است که به یک تابع منجر می شود. همچنین از کلمه کلیدی تابع استفاده می کند که به یک متغیر یا ویژگی یک شی اختصاص داده می شود.
در اینجا یک مثال است:
const greet = function() {
console.log("Hello!");
};
یا همان مثال با استفاده از تابع فلش:
const greet = () => {
console.log("Hello!");
};
یکی از تفاوت های کلیدی بین این دو این است که عبارات تابع بالا نمی روند. آنها فقط پس از تعریف می توانند فراخوانی شوند.
greet("stranger"); /* "ReferenceError:
Cannot access 'greet' before
initialization */
const greet = function(name) {
console.log(`Hello, ${name}!`);
}
عبارات توابع نیز نسبت به اعلانهای توابع انعطافپذیرتر هستند، زیرا میتوانند در زمینههای بیشتری استفاده شوند، مانند اینکه به عنوان آرگومان به توابع دیگر منتقل شوند یا به عنوان روشی از یک شی استفاده شوند.
<button id="myButton">Click me!</button>
<script>
const myButton = document.querySelector('#myButton');
myButton.addEventListener('click', function() {
console.log('Button clicked!');
});
</script>
مدتی نه چندان دور بود که عبارات تابع برتر در نظر گرفته می شدند زیرا گستره جهانی را آلوده نمی کردند. اما خوشبختانه، ماژولهای ES امروزه به طور گسترده مورد استفاده قرار گرفتهاند و این مشکل دیگر معتبر نیست.
پس آیا آنها یکسان هستند؟ در واقع، ** بله **! امروزه این در واقع به ترجیح شخصی بستگی دارد که کدام یک را انتخاب کنید. و ترجیح قوی من استفاده از Function Declarations است. برای نشان دادن اینکه چرا یک مؤلفه Vue را با استفاده از هر دو رویکرد بررسی می کنیم.
اعلام عملکرد:
<script setup>
import { debounce } from "debounce";
import { ref, watch } from "vue";
const searchTerm = ref("");
const products = ref([]);
watch(searchTerm, debounce(performSearch, 600));
async function performSearch() {
if (searchTerm.value === "") {
products.value = [];
return;
}
if (searchTerm.value.length < 2) {
return;
}
const searchUrl = getSearchUrl();
const response = await (await fetch(searchUrl)).json();
products.value = response.products;
}
function getSearchUrl() {
const url = "https://dummyjson.com/products/search";
const params = {
q: searchTerm.value,
limit: "5"
};
const searchParams = new URLSearchParams(params);
return `${url}?${searchParams}`;
};
function clearSearch() {
searchTerm.value = "";
products.value = [];
}
</script>
بیان تابع:
<script setup>
import { debounce } from "debounce";
import { ref, watch } from "vue";
const searchTerm = ref("");
const products = ref([]);
const performSearch = async () => {
if (searchTerm.value === "") {
products.value = [];
return;
}
if (searchTerm.value.length < 2) {
return;
}
const searchUrl = getSearchUrl();
const response = await (await fetch(searchUrl)).json();
products.value = response.products;
}
watch(searchTerm, debounce(performSearch, 600));
const getSearchUrl = () => {
const url = "https://dummyjson.com/products/search";
const params = {
q: searchTerm.value,
limit: "5"
};
const searchParams = new URLSearchParams(params);
return `${url}?${searchParams}`;
};
const clearSearch = () => {
searchTerm.value = "";
products.value = [];
}
</script>
همانطور که می دانید، هر چیزی که در تنظیمات اسکریپت اعلام شده است به طور خودکار در قالب موجود است. و شناسایی روش ها از داده ها یا متغیرهای محاسبه شده در هنگام استفاده از Function Declarations بسیار ساده تر است زیرا همه آنها با کلمه کلیدی تابع شروع می شوند. تفاوت ظریف است، اما به هر حال، بهترین کد چیزی است که دیگران به راحتی می توانند آن را درک کنند.