Skip to content

Commit 59fbfd3

Browse files
committed
Functions
1 parent 700d7de commit 59fbfd3

File tree

4 files changed

+42
-42
lines changed

4 files changed

+42
-42
lines changed

1-js/02-first-steps/15-function-basics/1-if-else-required/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ importance: 4
22

33
---
44

5-
# Có thật là từ "else" cần thiết?
5+
# "else" có bắt buộc không
66

77
Hàm sau đây sẽ trả về `true` nếu tham số `age` là lớn hơn `18`.
88

1-js/02-first-steps/15-function-basics/2-rewrite-function-question-or/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ function checkAge(age) {
1414
}
1515
```
1616

17-
Lưu ý rằng dấu ngoặc đơn quanh `age > 18` thì không được yêu cầu ở đây. Chúng tồn tại để dễ hơn cho việc đọc.
17+
Lưu ý rằng dấu ngoặc đơn quanh `age > 18` không bắt buộc. Chúng tồn tại để chúng ta dễ đọc hơn.

1-js/02-first-steps/15-function-basics/3-min/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ function min(a, b) {
1818
}
1919
```
2020

21-
Tái bút: Trong trường hợp có một phương trình `a == b` thì không còn quan trọng việc trả về giá trị gì.
21+
"Tái bút: Trong trường hợp so sánh bằng nhau `a == b` thì không quan trọng giá trị trả về gì."

1-js/02-first-steps/15-function-basics/article.md

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
Thông thường chúng ta cần thực hiện một hành động tương tự ở nhiều nơi trong tập lệnh.
44

5-
Ví dụ: chúng tôi cần hiển thị một thông báo đẹp mắt khi khách hàng truy cập đăng nhập, đăng xuất và có thể ở một nơi khác
5+
Ví dụ: chúng ta cần hiển thị một thông báo đẹp mắt khi khách hàng truy cập đăng nhập, đăng xuất và có thể ở một nơi khác
66

7-
Các hàm là "khối xây dựng" chính của chương trình. Chúng cho phép đoạn mã được gọi nhiều lần mà không lặp lại.
7+
Các hàm là "khối xây dựng" chính của chương trình. Chúng cho phép chúng ta viết một đoạn mã chỉ một lần nhưng lại có thể thực hiện nó nhiều lần, thay vì phải viết lặp lại đoạn mã đó mỗi khi muốn thực hiện nó.
88

99
Chúng ta đã thấy các ví dụ về hàm dựng sẵn, như `alert(message)`, `prompt(message, default)``confirm(question)`. Nhưng chúng ta cũng có thể tạo những hàm riêng theo các mục đích khác nhau.
1010

@@ -20,15 +20,15 @@ function showMessage() {
2020
}
2121
```
2222

23-
Từ khoá `function` được bắt đầu trước, sau đó đến *tên của hàm*, và có một danh sách các *tham số* giữa các dấu ngoặc đơn (được phân tách bằng dấu phẩy, trống trong ví dụ trên) và cuối cùng là mã của hàm, còn được đặt tên là "nội dung của hàm", giữa các dấu ngoặc nhọn.
23+
Từ khoá `function` được bắt đầu trước, sau đó đến *tên của hàm*, và có một danh sách các *tham số* giữa các dấu ngoặc đơn (được phân tách bằng dấu phẩy, những cũng có thể để trống như trong ví dụ trên) và cuối cùng là mã của hàm, còn được đặt tên là "thân hàm", giữa các dấu ngoặc nhọn.
2424

2525
```js
2626
function name(parameters) {
2727
...body...
2828
}
2929
```
3030

31-
Chức năng mới của chúng ta có thể được gọi bằng tên của nó:: `showMessage()`.
31+
Hàm mới của chúng ta có thể được gọi bằng tên của nó:: `showMessage()`.
3232

3333
Ví dụ:
3434

@@ -43,15 +43,15 @@ showMessage();
4343
*/!*
4444
```
4545

46-
Việc gọi `showMessage()` thực thi đoạn mã trong hàm. Ở đây chúng ta sẽ thấy tin nhắn được hiển thị hai lần.
46+
Việc gọi `showMessage()` thực thi đoạn mã trong hàm. Ở đây chúng ta sẽ thấy thông điệp được hiển thị hai lần.
4747

4848
Ví dụ này thể hiện rõ ràng một trong những mục đích chính của hàm: tránh trùng lặp mã.
4949

5050
Nếu chúng ta cần thay đổi thông báo hoặc cách nó được hiển thị, chỉ cần sửa đổi mã ở một nơi: hàm xuất ra nó là đủ.
5151

5252
## Các biến cục bộ
5353

54-
Một biến được khai báo bên trong một hàm chỉ hiển thị bên trong hàm đó.
54+
Một biến được khai báo bên trong một hàm chỉ nhìn thấy được từ bên trong hàm đó.
5555

5656
Ví dụ:
5757

@@ -66,7 +66,7 @@ function showMessage() {
6666

6767
showMessage(); // Xin chào, tôi là JavaScript!
6868

69-
alert( message ); // <-- Lỗi! Đây là biến cục bộ so với hàm
69+
alert( message ); // <-- Lỗi! Đây là cục bộ đối với hàm
7070
```
7171

7272
## Các biến bên ngoài
@@ -84,7 +84,7 @@ function showMessage() {
8484
showMessage(); // Xin chào, John
8585
```
8686

87-
Hàm có toàn quyền truy cập vào biến ngoài. Nó cũng có thể thay đổi được.
87+
Hàm có toàn quyền truy cập vào biến ngoài. Nó cũng có thể thay đổi được biến ngoài.
8888

8989
Ví dụ:
9090

@@ -105,9 +105,9 @@ showMessage();
105105
alert( userName ); // *!*Bob*/!*, the value was modified by the function
106106
```
107107

108-
Biến ngoài chỉ được sử dụng nếu không có biến cục bộ.
108+
Biến ngoài chỉ được sử dụng nếu không có biến cục bộ trùng tên với nó.
109109

110-
Nếu một biến cùng tên được khai báo bên trong hàm thì nó sẽ *che khuất* biến bên ngoài. Ví dụ: trong đoạn mã bên dưới, hàm sử dụng `userName` cục bộ. Cái bên ngoài bị bỏ qua:
110+
Nếu một biến cùng tên được khai báo bên trong hàm thì nó sẽ *che khuất* biến bên ngoài. Ví dụ: trong đoạn mã bên dưới, hàm sử dụng `userName` cục bộ. Biến bên ngoài bị bỏ qua:
111111

112112
```js run
113113
let userName = 'John';
@@ -128,11 +128,11 @@ alert( userName ); // *!*John*/!*, unchanged, the function did not access the ou
128128
```
129129

130130
```smart header="Biến toàn cục"
131-
Các biến được khai báo bên ngoài bất kỳ hàm nào, chẳng hạn như `userName` bên ngoài trong mã ở trên, được gọi là *toàn cục*.
131+
Các biến được khai báo bên ngoài bất kỳ hàm nào, chẳng hạn như biến ngoài `userName` trong mã ở trên, được gọi là *toàn cục*.
132132
133-
Các biến toàn cục được hiển thị từ bất kỳ hàm nào (trừ khi bị che bởi cục bộ).
133+
Các biến toàn cục có thể nhìn thấy được từ bất kỳ hàm nào (trừ phi bị che bởi biến cục bộ).
134134
135-
Đó là một cách thực hành tốt để giảm thiểu việc sử dụng các biến toàn cục. Mã nguồn hiện đại có ít hoặc không có toàn cục. Hầu hết các biến đều nằm trong hàm của chúng. Tuy nhiên, đôi khi chúng có thể hữu ích để lưu trữ dữ liệu cấp dự án.
135+
Đó là một cách thực hành tốt giảm thiểu việc sử dụng các biến toàn cục. Mã nguồn hiện đại có ít hoặc không có toàn cục. Hầu hết các biến đều nằm trong hàm của chúng. Tuy nhiên, đôi khi chúng có thể hữu ích để lưu trữ dữ liệu cấp dự án.
136136
```
137137

138138
## Các tham số
@@ -152,9 +152,9 @@ showMessage('Ann', "Có chuyện gì á?"); // Ann: What's up? (**)
152152
*/!*
153153
```
154154
155-
Khi hàm được gọi trong các dòng `(*)``(**)`, các giá trị đã cho sẽ được sao chép sang các biến cục bộ `from``text`. Sau đó, chức năng sử dụng chúng.
155+
Khi hàm được gọi trong các dòng `(*)``(**)`, các giá trị đã cho sẽ được sao chép sang các biến cục bộ `from``text`. Sau đó, hàm sẽ sử dụng chúng.
156156
157-
Đây là một ví dụ nữa: chúng ta có một biến `from`chuyểnvào hàm. Xin lưu ý: hàm thay đổi `from`, nhưng sự thay đổi không được nhìn thấy bên ngoài, vì hàm luôn nhận được bản sao của giá trị:
157+
Đây là một ví dụ nữa: chúng ta có một biến `from`truyềncho hàm. Xin lưu ý: hàm thay đổi `from`, nhưng sự thay đổi không được nhìn thấy từ bên ngoài, vì hàm luôn nhận được bản sao của giá trị:
158158
159159
160160
```js run
@@ -177,7 +177,7 @@ alert( from ); // Ann
177177
178178
## Những giá trị mặc định
179179
180-
Nếu một tham số không được cung cấp thì giá trị của nó sẽ trở thành `không xác định`.
180+
Nếu một tham số không được cung cấp thì giá trị của nó sẽ trở thành `undefined`.
181181
182182
Ví dụ, hàm `showMessage(from, text)` nói trên có thể được gọi bằng một đối số duy nhất:
183183
@@ -197,9 +197,9 @@ function showMessage(from, *!*text = "không có văn bản nào được đưa
197197
showMessage("Ann"); // Ann: không có văn bản nào được đưa ra
198198
```
199199
200-
Bây giờ nếu tham số `text` không được truyền, nó sẽ nhận giá trị `"không có văn bản"`
200+
Bây giờ nếu tham số `text` không được truyền, nó sẽ nhận giá trị `"không có văn bản nào được đưa ra"`
201201
202-
Ở đây `"không có văn bản nào"` là một chuỗi, nhưng nó có thể là một biểu thức phức tạp hơn, chỉ được đánh giá và gán nếu thiếu tham số. Vì vậy, điều này cũng có thể:
202+
Ở đây `"không có văn bản nào được đưa ra"` là một chuỗi, nhưng nó có thể là một biểu thức phức tạp hơn, chỉ được đánh giá và gán nếu thiếu tham số. Vì vậy, điều này cũng có thể:
203203
204204
```js run
205205
function showMessage(from, text = anotherFunction()) {
@@ -224,7 +224,7 @@ To check for an omitted parameter, we can compare it with `undefined`:
224224
function showMessage(text) {
225225
*!*
226226
if (text === undefined) {
227-
text = 'tin nhắn trống';
227+
text = 'tin nhắn rỗng';
228228
}
229229
*/!*
230230

@@ -259,7 +259,7 @@ showCount(); // unknown
259259
260260
## Trả về một giá trị
261261
262-
Kết quả là một hàm có thể trả về một giá trị vào mã gọi.
262+
Một hàm có thể trả về một giá trị làm kết quả cho mã gọi hàm đó.
263263
264264
Ví dụ đơn giản nhất là hàm tính tổng hai giá trị:
265265
@@ -272,7 +272,7 @@ let result = sum(1, 2);
272272
alert( result ); // 3
273273
```
274274
275-
Lệnh `return` có thể ở bất kỳ vị trí nào của hàm. Khi quá trình thực thi đạt đến mức đó, hàm sẽ dừng và giá trị được trả về mã gọi (được gán cho `kết quả` ở trên).
275+
Lệnh `return` có thể ở bất kỳ vị trí nào của hàm. Khi quá trình thực thi đạt đến mức đó, hàm sẽ dừng và giá trị được trả về mã gọi (được gán cho `result` ở trên).
276276
277277
Có thể có nhiều lần xuất hiện của `return` trong một hàm. Ví dụ:
278278
@@ -315,18 +315,18 @@ function showMovie(age) {
315315
}
316316
```
317317
318-
Ở đoạn mã ở trên, nếu `checkAge(age)` trả về `false`, sau đó `showMovie` sẽ không dẫn tới `alert`.
318+
Ở đoạn mã ở trên, nếu `checkAge(age)` trả về `false`, thì `showMovie` sẽ không thực hiện hàm `alert`.
319319
320-
````smart header="Một hàm trả về giá trị với `return` hoặc không có gì với `undefined`"
321-
Nếu một hàm không trả về một giá trị thì cũng giống như khi nó trả về `undefined`:
320+
````smart header="Một hàm trả với `return` rỗng hoặc không có `return` thì trả về `undefined`"
321+
Nếu một hàm không trả về một giá trị thì cũng giống như nó trả về `undefined`:
322322
323323
```js run
324324
function doNothing() { /* empty */ }
325325

326326
alert( doNothing() === undefined ); // true
327327
```
328328
329-
Trường hợp `return` thì cũng giống với `return undefined`:
329+
Trường hợp `return` rỗng, không kèm theo giá trị, thì cũng giống với `return undefined`:
330330
331331
```js run
332332
function doNothing() {
@@ -338,7 +338,7 @@ alert( doNothing() === undefined ); // true
338338
````
339339
340340
````warn header="Không bao giờ thêm dòng mới giữa `return` và giá trị"
341-
Đối với một biểu thức dài trong `return`, có thể nên đặt nó trên một dòng riêng biệt, như thế này:
341+
Đối với một biểu thức dài trong `return`, có thể bạn muốn đặt nó trên một dòng riêng biệt, như thế này:
342342
343343
```js
344344
return
@@ -369,7 +369,7 @@ Và nó sẽ hoạt động đúng như chúng ta mong đợi.
369369
370370
Các hàm là các hành động. Vì vậy tên của chúng thường là một động từ. Nó phải ngắn gọn, chính xác nhất có thể và mô tả chức năng của hàm để ai đó đọc mã sẽ biết được chức năng của hàm.
371371
372-
Thông lệ phổ biến là bắt đầu một chức năng bằng tiền tố bằng lời nói mô tả hành động một cách mơ hồ. Phải có sự thống nhất trong nhóm về ý nghĩa của các tiền tố.
372+
Thông lệ phổ biến là bắt đầu một hàm bằng tiền tố động từ mô tả mơ hồ hành động của hàm. Phải có sự thống nhất trong nhóm về ý nghĩa của các tiền tố.
373373
374374
Ví dụ: các hàm bắt đầu bằng `"show"` thường hiển thị nội dung nào đó.
375375
@@ -383,7 +383,7 @@ Chức năng bắt đầu bằng...
383383
Các ví dụ cho những tên kể trên:
384384
385385
```js no-beautify
386-
showMessage(..) // đưa ra một tin nhắn
386+
showMessage(..) // một thông báo (hoặc thông điệp)
387387
getAge(..) // trả về tuổi (lấy nó bằng cách nào đó)
388388
calcSum(..) // tính tổng và trả về kết quả
389389
createForm(..) // tạo một biểu mẫu (và thường trả về nó)
@@ -393,7 +393,7 @@ checkPermission(..) // kiểm tra quyền, trả về đúng/sai
393393
Với các tiền tố đã có sẵn, chỉ cần nhìn lướt qua tên hàm là bạn sẽ hiểu nó thực hiện loại công việc gì và trả về loại giá trị nào..
394394
395395
```smart header="Một hàm -- một hành động"
396-
Một hàm phải thực hiện chính xác những gì được gợi ý theo tên của nó, không hơn thế nữa.
396+
Một hàm nên thực hiện chính xác những gì được gợi ý theo tên của nó, không làm gì khác nữa.
397397

398398
Hai hành động độc lập thường xứng đáng có hai hàm, ngay cả khi chúng thường được gọi cùng nhau (trong trường hợp đó chúng ta có thể tạo hàm thứ 3 gọi hai hàm đó).
399399

@@ -403,22 +403,22 @@ Một vài ví dụ về việc vi phạm quy tắc này:
403403
- `createForm` -- sẽ rất tệ nếu nó sửa đổi tài liệu, thêm biểu mẫu vào đó (chỉ nên tạo và trả về).
404404
- `checkPermission` -- sẽ rất tệ nếu nó hiển thị thông báo `quyền truy cập được cấp/từ chối` (chỉ nên thực hiện kiểm tra và trả về kết quả).
405405

406-
Những ví dụ này giả định ý nghĩa chung của tiền tố. Bạn và nhóm của bạn có thể tự do đồng ý về các ý nghĩa khác, nhưng thông thường chúng không khác nhau nhiều. Trong mọi trường hợp, bạn phải hiểu rõ ý nghĩa của tiền tố, hàm có tiền tố có thể và không thể làm gì. Tất cả các hàm có tiền tố giống nhau phải tuân theo các quy tắc. Và nhóm nên chia sẻ kiến ​​thức.
406+
Những ví dụ này giả định ý nghĩa chung của tiền tố. Bạn và nhóm của bạn có thể tự do đồng ý về các ý nghĩa khác, nhưng thông thường chúng không khác nhau nhiều. Trong mọi trường hợp, bạn phải hiểu rõ ý nghĩa của tiền tố, hàm có tiền tố có thể và không thể làm gì. Tất cả các hàm có tiền tố giống nhau phải tuân theo các quy tắc. Và nhóm nên có chung nhận ​​thức.
407407
```
408408
409409
```smart header="Những tên hàm siêu ngắn"
410410
Các hàm được sử dụng *rất thường xuyên* đôi khi có tên cực ngắn.
411411

412-
Ví dụ: khung [jQuery](http://jquery.com) xác định một hàm `$`. Thư viện [Lodash](http://lodash.com/) có chức năng cốt lõi được đặt tên là `_`.
412+
Ví dụ: khung [jQuery](http://jquery.com) định nghĩa một hàm tên là `$`. Thư viện [Lodash](http://lodash.com/) có hàm cốt lõi tên là `_`.
413413

414414
Đây là những trường hợp ngoại lệ. Nói chung tên hàm phải ngắn gọn và mang tính mô tả.
415415
```
416416
417-
## Hàm == Bình luận
417+
## Hàm == Chú thích
418418
419419
Các hàm phải ngắn gọn và thực hiện chính xác một việc. Nếu thứ đó lớn, có lẽ nên chia hàm thành một vài hàm nhỏ hơn. Đôi khi việc tuân theo quy tắc này có thể không dễ dàng nhưng đó chắc chắn là một điều tốt.
420420
421-
Một chức năng riêng biệt không chỉ dễ kiểm tra và gỡ lỗi hơn -- sự tồn tại của nó là một nhận xét tuyệt vời!
421+
Một chức năng riêng biệt không chỉ dễ kiểm tra và gỡ lỗi hơn -- là một chú thích tuyệt vời!
422422
423423
Ví dụ: so sánh hai hàm `showPrimes(n)` bên dưới. Mỗi cái xuất ra [số nguyên tố](https://en.wikipedia.org/wiki/Prime_number) tối đa `n`.
424424
@@ -473,16 +473,16 @@ function name(parameters, delimited, by, comma) {
473473
474474
- Các giá trị được truyền vào hàm dưới dạng tham số sẽ được sao chép vào các biến cục bộ của hàm đó.
475475
- Một hàm có thể truy cập các biến ngoài. Nhưng nó chỉ hoạt động từ trong ra ngoài. Mã bên ngoài hàm không thấy các biến cục bộ của nó.
476-
- Hàm có thể trả về một giá trị. Nếu không, thì kết quả của nó là `không xác định`.
476+
- Hàm có thể trả về một giá trị. Nếu không, thì kết quả của nó là `undefined`.
477477
478-
Để làm cho mã rõ ràng và dễ hiểu, bạn nên sử dụng chủ yếu các biến và tham số cục bộ trong hàm, không nên sử dụng các biến bên ngoài.
478+
Để làm cho mã rõ ràng và dễ hiểu, bạn nên sử dụng chủ yếu các biến cục bộ và tham số trong hàm, không nên sử dụng các biến bên ngoài.
479479
480-
Việc hiểu một hàm nhận tham số, làm việc với chúng trả về kết quả luôn dễ dàng hơn so với hàm không nhận tham số nhưng sửa đổi các biến bên ngoài như một tác dụng phụ.
480+
Việc hiểu một hàm nhận các tham số, sử dụng chúng rồi trả về một kết quả, luôn dễ hiểu hơn một hàm không nhận tham số nào, nhưng lại thay đổi giá trị của các biến ngoài, như một tác dụng phụ.
481481
482482
Đặt tên cho hàm:
483483
484-
- Tên phải mô tả rõ ràng chức năng của nó. Khi chúng ta thấy một lệnh gọi hàm trong mã, một cái tên hay sẽ ngay lập tức cho chúng ta hiểu nó làm gì và trả về.
485-
- Hàm là một hành động nên tên hàm thường bằng lời nói.
486-
- Tồn tại nhiều tiền tố hàm phổ biến như `create…`, `show…`, `get…`, `check…`, v.v. Sử dụng chúng để gợi ý chức năng của một chức năng.
484+
- Tên phải mô tả rõ ràng chức năng của nó. Khi chúng ta thấy một lệnh gọi hàm trong mã, một cái tên hay sẽ ngay lập tức giúp chúng ta hiểu nó làm gì và trả về.
485+
- Hàm là một hành động nên tên hàm thường là động từ.
486+
- Tồn tại nhiều tiền tố hàm phổ biến như `create…`, `show…`, `get…`, `check…`, v.v. Sử dụng chúng để gợi ý chức năng của một hàm.
487487
488488
Hàm là khối xây dựng chính của tập lệnh. Hiện tại chúng ta đã đề cập đến những điều cơ bản, vì vậy chúng ta thực sự có thể bắt đầu tạo và sử dụng chúng. Nhưng đó mới chỉ là sự khởi đầu. Chúng ta sẽ còn quay lại chúng nhiều lần, đi sâu hơn vào các tính năng nâng cao của chúng.

0 commit comments

Comments
 (0)