Skip to content

Commit 52f7a4b

Browse files
authored
Merge pull request #181 from javascript-tutorial/sync-8d04d0d2
Sync with upstream @ 8d04d0d
2 parents 4964d5d + 992b32f commit 52f7a4b

12 files changed

Lines changed: 48 additions & 24 deletions

File tree

1-js/02-first-steps/05-types/article.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,18 @@ typeof alert // "function" (3)
251251
سه خط آخر احتمالا نیاز به توضیحات بیشتری دارد:
252252
253253
1. `Math` یک شیء built-in (از پیش نوشته شده در هسته زبان) است که عملیات متنوع ریاضیاتی را در اختیار ما قرار می‌دهد. ما آن را در فصل <info:number> یاد می‌گیریم. در اینجا صرفا یک مثال از آن را نمایش دادیم.
254-
2. خروجی `typeof null` همانطور که می‌بینید `"object"` است. این یک خطا در نوع کار `typeof` می‌باشد که به منظور سازگاری باقی مانده است. مطمئنا `null` یک object نیست. خودِ null یکی از انواع داده در جاوااسکریپت است.
255-
3. خروجی `typeof alert` `"function"` است چراکه `alert` خودش هم یک تابع است. ما در بخش‌های بعدی با تابع‌ها بیشتر آشنا خواهیم شد و خواهیم آموخت که نوعی تحت عنوان function در جاوااسکریپت نداریم. تابع‌ها در اصل از نوعِ object هستند. اما عملگر `typeof` به آنها به طرز دیگری برخورد می‌کند و `function` را برمی‌گرداند. این هم از روزهای اول جاوااسکریپت وجود داشته است. به طور فنی، این رفتار درست نیست، اما در عمل می‌تواند مفید باشد.
254+
2. خروجی `typeof null` برابر با `"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` رایج‌تر است.
265+
```
256266

257267
## خلاصه
258268

@@ -269,7 +279,7 @@ typeof alert // "function" (3)
269279

270280
عملگر `typeof` به شما اجازه می‌دهد نوع مقدار ذخیره شده در یک متغیر را تشخصی دهید.
271281

272-
- به دو طریق : `typeof x` و یا `typeof(x)`.
282+
- معمولا به صورت `typeof x` استفاده می‌شود، اما `typeof(x)` هم قابل قبول است.
273283
- یک رشته شامل اسم نوع را برمی‌گرداند، مثل `"string"`.
274284
- برای `null` مقدار `"object"` را نمایش می‌دهد -- این یک خطا در خودِ زبان است، در واقع null یک object نیست.
275285

1-js/02-first-steps/16-function-expressions/article.md

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,29 @@ function sayHi() {
1212

1313
یک سینتکس دیگر هم برای ساخت تابع وجود دارد که *Function Expression* نامیده می‌شود.
1414

15-
اینطور به نظر می‌رسد:
15+
این سینتکس به ما این امکان را می‌دهد که بین هر عبارتی یک تابع جدید بسازیم.
16+
17+
برای مثال:
1618

1719
```js
1820
let sayHi = function() {
1921
alert( "سلام" );
2022
};
2123
```
2224

23-
اینجا، تابع ساخته شده و مثل هر مقدار دیگری، صراحتا به متغیر تخصیص داده شده است. فرقی ندارد که تابع چگونه تعریف شده، تابع فقط یک مقدار است که داخل متغیر `sayHi` ذخیره شده است.
25+
اینجا می‌توانیم متغیر `sayHi` را ببینیم که مقداری را دریافت می‌کند، تابع جدید، که به صورت `function() { alert("Hello"); }` ساخته شده است.
26+
27+
چون ایجاد تابع با زمینه (context) عبارت مقداردهی (سمت راست `=`) رخ می‌دهد، این یک *Function Expression* است.
28+
29+
لطفا در نظر داشته باشید، هیچ اسمی بعد از کلمه کلیدی `function` وجود ندارد. حذف کردن اسم برای Function Expressionها مجاز است.
30+
31+
اینجا ما بلافاصله آن را به متغیر اختصاص می‌دهیم پس معنی این قطعه‌های کد یکسان است: «تابعی بساز و آن را درون متغیر `sayHi` قرار بده».
2432

25-
معنی این مثال‌های کد یکسان است: "یک تابع بساز و آن را داخل متغیر `sayHi` بگذار".
33+
در موقعیت‌های پیشرفته‌تر، که بعدا به آن‌ها می‌رسیم، یک تابع ممکن است ایجاد و بلافاصله فراخوانی شود یا برای اینکه بعدا اجرا شود برنامه‌ریزی صورت گیرد و جایی ذخیره نشود، از این رو ناشناس بماند.
34+
35+
## تابع یک مقدار است
36+
37+
بیایید تکرار کنیم: مهم نیست که تابع چگونه ساخته شده است، یک تابع همیشه یک مقدار است. هر دو مثال بالا تابعی را درون متغیر `sayHi` ذخیره می‌کنند.
2638

2739
ما حتی می‌توانیم آن مقدار را با استفاده از `alert` چاپ کنیم:
2840

@@ -63,10 +75,10 @@ sayHi(); // سلام // هنوزم کار می‌کند (چرا نکند)
6375
2. خط `(2)` آن را داخل متغیر `func` کپی می‌کند. لطفا دوباره در نظر داشته باشید: هیچ پرانتزی بعد از `sayHi` وجود ندارد. اگر وجود داشت، سپس `func = sayHi()` *نتیجه صدا زدن* `sayHi()` را در `func` می‌نوشت، نه خود *تابع* `sayHi`.
6476
3. حالا تابع می‌تواند با `sayHi()` و `func()` صدا زده شود.
6577

66-
همچنین توجه داشته باشید که ما می‌توانستیم از یک Function Expression برای تعریف `sayHi` در خط اول، استفاده کنیم:
78+
همچنین می‌توانستیم از یک Function Expression برای تعریف `sayHi` در خط اول، استفاده کنیم:
6779

6880
```js
69-
let sayHi = function() {
81+
let sayHi = function() { // (1) ایجاد
7082
alert( "سلام" );
7183
};
7284

@@ -90,9 +102,9 @@ let sayHi = function() {
90102
}*!*;*/!*
91103
```
92104
93-
جواب ساده است:
94-
- هیچ نیازی به `;` در انتهای بلوک‌های کد و ساختارهای سینتکس که از آنها مثل `if { ... }`، `for { }`، `function f { }` و... استفاده می‌شود نیست.
95-
- یک Function Expression به عنوان یک مقدار، در داخل دستور استفاده می‌شود: `let sayHi = ...;`.این یک بلوک کد نیست، بلکه یک تخصیص دادن است. نقطه ویرگول `;` در انتهای دستورها پیشنهاد می‌شود، بدون توجه به اینکه مقدار چه چیزی باشد. پس نقطه ویرگول در اینجا به خود Function Expression مربوط نیست، فقط دستور را به پایان می‌رساند.
105+
جواب ساده است: یک Function Expression به صورت `function(…) {…}`، در داخل دستور مقداردهی استفاده می‌شود: `let sayHi = ...;`. نقطه ویرگول `;` در انتهای دستور پیشنهاد می‌شود، این علامت جزء سینتکس تابع نیست.
106+
107+
نقطه ویرگول برای مقداردهی ساده‌تر وجود دارد مثل `let sayHi = 5;` و همچنین برای مقداردهی تابع نیز وجود دارد.
96108
````
97109

98110
## تابع‌های Callback

1-js/02-first-steps/17-arrow-functions-basics/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
به‌خاطر شکلی که دارد، arrow functions نام گرفته است.
66

77
```js
8-
let func = (arg1, arg2, ..., argN) => expression
8+
let func = (arg1, arg2, ..., argN) => expression;
99
```
1010

11-
...این کد یک تابع `func` می‌سازد که دو آرگومان `arg1..argN` می‌پذیرد و با استفاده از این دو آرگومان `expression` سمت راست را محاسبه می‌کند و نتیجه را برمی‌گرداند.
11+
...این کد یک تابع `func` می‌سازد که آرگومان‌های `arg1..argN` را می‌پذیرد و با استفاده از این آرگومان‌ها `expression` سمت راست را ارزیابی می‌کند و نتیجه آن را برمی‌گرداند.
1212

1313
به بیانی دیگر، این کد نسخه‌ی کوتاه‌شده کد زیر است:
1414

1-js/04-object-basics/04-object-methods/8-chain-calls/solution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ let ladder = {
2323
}
2424
};
2525

26-
ladder.up().up().down().up().down().showStep(); // 1
26+
ladder.up().up().down().showStep().down().showStep(); // اول 1 را نشان می‌دهد و سپس 0 را
2727
```
2828

2929
همچنین می‌توانیم به ازای هر خط یک بار صدا بزنیم. برای زنجیره‌های طولانی این روش خوانایی بیشتری دارد:
@@ -33,7 +33,7 @@ ladder
3333
.up()
3434
.up()
3535
.down()
36-
.up()
36+
.showStep() // 1
3737
.down()
38-
.showStep(); // 1
38+
.showStep(); // 0
3939
```

1-js/04-object-basics/04-object-methods/8-chain-calls/task.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ ladder.up();
2828
ladder.up();
2929
ladder.down();
3030
ladder.showStep(); // 1
31+
ladder.down();
32+
ladder.showStep(); // 0
3133
```
3234

3335
کد `up`، `down` و `showStep` را تغییر دهید تا صدازدن‌ها را زنجیره‌ای کنید، مثل این:
3436

3537
```js
36-
ladder.up().up().down().showStep(); // 1
38+
ladder.up().up().down().showStep().down().showStep(); // اول 1 را نشان می‌دهد سپس 0 را
3739
```
3840

3941
چنین روشی در بین کتابخانه‌های جاوااسکریپت به طور گسترده استفاده می‌شود.

1-js/04-object-basics/08-symbol/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ for (let key in user) alert(key); // name, age (بدون سمبل)
161161
alert( "به طور مستقیم: " + user[id] );
162162
```
163163

164-
همچنین `Object.keys(user)` هم آنها را نادیده می‌گیرد. این یک بخش از اصل کلی «مخفی‌سازی ویژگی‌های سمبلی» است. اگر یک اسکریپت یا کتابخانه دیگر در شیء ما حلقه بزند، به تصادفی به ویژگی سمبلی ما دسترسی نخواهد داشت.
164+
همچنین `Object.keys(user)` هم آنها را نادیده می‌گیرد. این بخشی از اصل کلی «مخفی‌سازی ویژگی‌های سمبلی» است. اگر یک اسکریپت یا کتابخانه دیگر در شیء ما حلقه بزند، به تصادفی به ویژگی سمبلی ما دسترسی نخواهد داشت.
165165

166166
در مقابل، [Object.assign](mdn:js/Object/assign) هم ویژگی‌های رشته و هم سمبل را کپی می‌کند:
167167

1-js/06-advanced-functions/04-var/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,11 @@ function go() {
256256
```js run
257257
// IIFE راه‌هایی برای ایجاد
258258

259-
(function() {
259+
*!*(*/!*function() {
260260
alert("پرانتزهای دور تابع");
261261
}*!*)*/!*();
262262

263-
(function() {
263+
*!*(*/!*function() {
264264
alert("پرانتزهای دور تمام عبارت");
265265
}()*!*)*/!*;
266266

2-ui/1-document/05-basic-dom-node-properties/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ The classes are:
2727
- [HTMLAnchorElement](https://html.spec.whatwg.org/multipage/semantics.html#htmlanchorelement) -- the class for `<a>` elements,
2828
- ...and so on.
2929

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.
3131

3232
So, the full set of properties and methods of a given node comes as the result of the inheritance.
3333

2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseoverout-fast.view/script.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ parent.onmouseover = parent.onmouseout = parent.onmousemove = handler;
33

44
function handler(event) {
55
let type = event.type;
6-
while (type < 11) type += ' ';
6+
while (type.length < 11) type += ' ';
77

88
log(type + " target=" + event.target.id)
99
return false;

2-ui/3-event-details/6-pointer-events/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ Pointer events allow handling mouse, touch and pen events simultaneously, with a
271271

272272
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.
273273

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.
275275

276276
Additional abilities of pointer events are:
277277

0 commit comments

Comments
 (0)