You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1. `Math` یک شیء built-in (از پیش نوشته شده در هسته زبان) است که عملیات متنوع ریاضیاتی را در اختیار ما قرار میدهد. ما آن را در فصل <info:number> یاد میگیریم. در اینجا صرفا یک مثال از آن را نمایش دادیم.
254
-
2. خروجی `typeofnull` همانطور که میبینید `"object"` است. این یک خطا در نوع کار `typeof` میباشد که به منظور سازگاری باقی مانده است. مطمئنا `null` یک object نیست. خودِ null یکی از انواع داده در جاوااسکریپت است.
255
-
3. خروجی `typeof alert``"function"` است چراکه `alert` خودش هم یک تابع است. ما در بخشهای بعدی با تابعها بیشتر آشنا خواهیم شد و خواهیم آموخت که نوعی تحت عنوان function در جاوااسکریپت نداریم. تابعها در اصل از نوعِ object هستند. اما عملگر `typeof` به آنها به طرز دیگری برخورد میکند و `function` را برمیگرداند. این هم از روزهای اول جاوااسکریپت وجود داشته است. به طور فنی، این رفتار درست نیست، اما در عمل میتواند مفید باشد.
254
+
2. خروجی `typeofnull` برابر با `"object"` است. این یک خطا در طرز کار `typeof` میباشد که از روزهای اول در جاوااسکریپت وجود داشته و به منظور سازگاری باقی مانده است. مطمئنا `null` یک object نیست. خودِ null یکی از انواع داده در جاوااسکریپت است.
255
+
3. خروجی `typeof alert` برابر با `"function"` است چراکه `alert` خودش هم یک تابع است. ما در بخشهای بعدی با تابعها بیشتر آشنا خواهیم شد و خواهیم آموخت که نوعی تحت عنوان function در جاوااسکریپت نداریم. تابعها در اصل از نوعِ object هستند. اما عملگر `typeof` با آنها به طرز دیگری برخورد میکند و `function` را برمیگرداند. این هم از روزهای اول جاوااسکریپت وجود داشته است. به طور فنی، این رفتار درست نیست، اما در عمل میتواند مفید باشد.
256
+
257
+
```smart header="سینتکس `typeof(x)`"
258
+
شاید سینتکس دیگری را دیده باشید: `typeof(x)`. این با `typeof x` یکسان است.
259
+
260
+
برای اینکه واضح باشد: `typeof` یک اپراتور است نه یک تابع. اینجا پرانتزها بخشی از `typeof` نیستند. این نوعی از پرانتز است که برای گروهبندی ریاضیاتی استفاده میشود.
261
+
262
+
معمولا چنین پرانتزهایی یک عبارت ریاضیاتی، مانند `(2 + 2)`، را شامل میشوند اما اینجا آنها فقط آرگومان `(x)` را دارند. از لحاظ سینتکس، آنها به ما این امکان را میدهند که از وجود فاصله بین عملگر `typeof` و آرگومانش جلوگیری کنیم و بعضی از اشخاص آن را دوست دارند.
263
+
264
+
بعضی از اشخاص `typeof(x)` را ترجیح میدهند اگرچه سینتکس `typeof x` رایجتر است.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/16-function-expressions/article.md
+20-8Lines changed: 20 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,17 +12,29 @@ function sayHi() {
12
12
13
13
یک سینتکس دیگر هم برای ساخت تابع وجود دارد که *Function Expression* نامیده میشود.
14
14
15
-
اینطور به نظر میرسد:
15
+
این سینتکس به ما این امکان را میدهد که بین هر عبارتی یک تابع جدید بسازیم.
16
+
17
+
برای مثال:
16
18
17
19
```js
18
20
letsayHi=function() {
19
21
alert( "سلام" );
20
22
};
21
23
```
22
24
23
-
اینجا، تابع ساخته شده و مثل هر مقدار دیگری، صراحتا به متغیر تخصیص داده شده است. فرقی ندارد که تابع چگونه تعریف شده، تابع فقط یک مقدار است که داخل متغیر `sayHi` ذخیره شده است.
25
+
اینجا میتوانیم متغیر `sayHi` را ببینیم که مقداری را دریافت میکند، تابع جدید، که به صورت `function() { alert("Hello"); }` ساخته شده است.
26
+
27
+
چون ایجاد تابع با زمینه (context) عبارت مقداردهی (سمت راست `=`) رخ میدهد، این یک *Function Expression* است.
28
+
29
+
لطفا در نظر داشته باشید، هیچ اسمی بعد از کلمه کلیدی `function` وجود ندارد. حذف کردن اسم برای Function Expressionها مجاز است.
30
+
31
+
اینجا ما بلافاصله آن را به متغیر اختصاص میدهیم پس معنی این قطعههای کد یکسان است: «تابعی بساز و آن را درون متغیر `sayHi` قرار بده».
24
32
25
-
معنی این مثالهای کد یکسان است: "یک تابع بساز و آن را داخل متغیر `sayHi` بگذار".
33
+
در موقعیتهای پیشرفتهتر، که بعدا به آنها میرسیم، یک تابع ممکن است ایجاد و بلافاصله فراخوانی شود یا برای اینکه بعدا اجرا شود برنامهریزی صورت گیرد و جایی ذخیره نشود، از این رو ناشناس بماند.
34
+
35
+
## تابع یک مقدار است
36
+
37
+
بیایید تکرار کنیم: مهم نیست که تابع چگونه ساخته شده است، یک تابع همیشه یک مقدار است. هر دو مثال بالا تابعی را درون متغیر `sayHi` ذخیره میکنند.
26
38
27
39
ما حتی میتوانیم آن مقدار را با استفاده از `alert` چاپ کنیم:
28
40
@@ -63,10 +75,10 @@ sayHi(); // سلام // هنوزم کار میکند (چرا نکند)
63
75
2. خط `(2)` آن را داخل متغیر `func` کپی میکند. لطفا دوباره در نظر داشته باشید: هیچ پرانتزی بعد از `sayHi` وجود ندارد. اگر وجود داشت، سپس `func = sayHi()`*نتیجه صدا زدن*`sayHi()` را در `func` مینوشت، نه خود *تابع*`sayHi`.
64
76
3. حالا تابع میتواند با `sayHi()` و `func()` صدا زده شود.
65
77
66
-
همچنین توجه داشته باشید که ما میتوانستیم از یک Function Expression برای تعریف `sayHi` در خط اول، استفاده کنیم:
78
+
همچنین میتوانستیم از یک Function Expression برای تعریف `sayHi` در خط اول، استفاده کنیم:
67
79
68
80
```js
69
-
letsayHi=function() {
81
+
letsayHi=function() {// (1) ایجاد
70
82
alert( "سلام" );
71
83
};
72
84
@@ -90,9 +102,9 @@ let sayHi = function() {
90
102
}*!*;*/!*
91
103
```
92
104
93
-
جواب ساده است:
94
-
- هیچ نیازی به `;` در انتهای بلوکهای کد و ساختارهای سینتکس که از آنها مثل `if { ... }`، `for { }`، `function f { }` و... استفاده میشود نیست.
95
-
- یک Function Expression به عنوان یک مقدار، در داخل دستور استفاده میشود: `let sayHi = ...;`.این یک بلوک کد نیست، بلکه یک تخصیص دادن است. نقطه ویرگول `;` در انتهای دستورها پیشنهاد میشود، بدون توجه به اینکه مقدار چه چیزی باشد. پس نقطه ویرگول در اینجا به خود Function Expression مربوط نیست، فقط دستور را به پایان میرساند.
105
+
جواب ساده است: یک Function Expression به صورت `function(…) {…}`، در داخل دستور مقداردهی استفاده میشود: `let sayHi = ...;`. نقطه ویرگول `;` در انتهای دستور پیشنهاد میشود، این علامت جزء سینتکس تابع نیست.
106
+
107
+
نقطه ویرگول برای مقداردهی سادهتر وجود دارد مثل `let sayHi = 5;` و همچنین برای مقداردهی تابع نیز وجود دارد.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/17-arrow-functions-basics/article.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,10 +5,10 @@
5
5
بهخاطر شکلی که دارد، arrow functions نام گرفته است.
6
6
7
7
```js
8
-
letfunc= (arg1, arg2, ..., argN) => expression
8
+
letfunc= (arg1, arg2, ..., argN) => expression;
9
9
```
10
10
11
-
...این کد یک تابع `func` میسازد که دو آرگومان `arg1..argN` میپذیرد و با استفاده از این دو آرگومان `expression` سمت راست را محاسبه میکند و نتیجه را برمیگرداند.
11
+
...این کد یک تابع `func` میسازد که آرگومانهای `arg1..argN`را میپذیرد و با استفاده از این آرگومانها `expression` سمت راست را ارزیابی میکند و نتیجه آن را برمیگرداند.
12
12
13
13
به بیانی دیگر، این کد نسخهی کوتاهشده کد زیر است:
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/08-symbol/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -161,7 +161,7 @@ for (let key in user) alert(key); // name, age (بدون سمبل)
161
161
alert( "به طور مستقیم: "+ user[id] );
162
162
```
163
163
164
-
همچنین `Object.keys(user)` هم آنها را نادیده میگیرد. این یک بخش از اصل کلی «مخفیسازی ویژگیهای سمبلی» است. اگر یک اسکریپت یا کتابخانه دیگر در شیء ما حلقه بزند، به تصادفی به ویژگی سمبلی ما دسترسی نخواهد داشت.
164
+
همچنین `Object.keys(user)` هم آنها را نادیده میگیرد. این بخشی از اصل کلی «مخفیسازی ویژگیهای سمبلی» است. اگر یک اسکریپت یا کتابخانه دیگر در شیء ما حلقه بزند، به تصادفی به ویژگی سمبلی ما دسترسی نخواهد داشت.
165
165
166
166
در مقابل، [Object.assign](mdn:js/Object/assign) هم ویژگیهای رشته و هم سمبل را کپی میکند:
Copy file name to clipboardExpand all lines: 2-ui/1-document/05-basic-dom-node-properties/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,7 +27,7 @@ The classes are:
27
27
-[HTMLAnchorElement](https://html.spec.whatwg.org/multipage/semantics.html#htmlanchorelement) -- the class for `<a>` elements,
28
28
- ...and so on.
29
29
30
-
There are many other tags with their own classes that may specific properties and methods, while some elements, such as `<span>`, `<section>`, `<article>` do not have any specific properties, so they are instances of `HTMLElement` class.
30
+
There are many other tags with their own classes that may have specific properties and methods, while some elements, such as `<span>`, `<section>`, `<article>` do not have any specific properties, so they are instances of `HTMLElement` class.
31
31
32
32
So, the full set of properties and methods of a given node comes as the result of the inheritance.
Copy file name to clipboardExpand all lines: 2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseoverout-fast.view/script.js
Copy file name to clipboardExpand all lines: 2-ui/3-event-details/6-pointer-events/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -271,7 +271,7 @@ Pointer events allow handling mouse, touch and pen events simultaneously, with a
271
271
272
272
Pointer events extend mouse events. We can replace `mouse` with `pointer` in event names and expect our code to continue working for mouse, with better support for other device types.
273
273
274
-
For drag'n'drops and complex touch interactions that the browser may decide to hijack and handle on its own - remember to cancel the default action on events and set `touch-events: none` in CSS for elements that we engage.
274
+
For drag'n'drops and complex touch interactions that the browser may decide to hijack and handle on its own - remember to cancel the default action on events and set `touch-action: none` in CSS for elements that we engage.
0 commit comments