- Notifications
You must be signed in to change notification settings - Fork44
An Introduction to JavaScript#30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
2 commits Select commitHold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
134 changes: 67 additions & 67 deletions1-js/01-getting-started/1-intro/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,121 +1,121 @@ | ||
| #Mở đầu về Javascript | ||
| Hãy cùng xem Javascript có gì đặc biệt, chúng ta có thể hoàn thành những gì với nó, và những công nghệ kết hợp tốt với ngôn ngữ này. | ||
| ##JavaScript là gì? | ||
| *JavaScript*ban đầu được tạo ra để *"make web pages alive"*. | ||
| Các chương trình trong ngôn ngữ này được gọi là *kịch bản (scripts)*.Chúng có thể được viết ngay trongHTMLcủa trang web và chạy khi tải trang. | ||
| Các tập lệnh (scripts) được cung cấp và thực thi dưới dạng văn bản thuần túy. Chúng không cần chuẩn bị hay biên dịch để có thể chạy được. | ||
| Ở khía cạnh này, JavaScriptrất khác với ngôn ngữ lập trình có tên là [Java](https://en.wikipedia.org/wiki/Java_(programming_language)). | ||
| ```smart header="Vì sao lại gọi là <u>Java</u>Script?" | ||
| Khi Javascript được tạo ra, ban đầu nó có một cái tên khác: "LiveScript".Nhưng lúc này Java đang rất phổ biến, vì vậy người ta đã quyết định rằng đặt một ngôn ngữ mới là "em trai" của Javasẽ có ích. | ||
| Nhưng với sự phát triển của mình, JavaScriptđã trở thành một ngôn ngữ hoàn toàn độc lập, với những đặc điểm kỹ thuật riêng của mình được gọi là[ECMAScript](http://en.wikipedia.org/wiki/ECMAScript),và bây giờ nó chẳng liên quan gì đến Java cả. | ||
| ``` | ||
| Ngày nay, JavaScriptkhông những có thể thực thi trên trình duyệt, mà còn trên cả máy chủ (server), hoặc trên bất cứ nơi nào có chương trình tên là [the JavaScript engine](https://en.wikipedia.org/wiki/JavaScript_engine). | ||
| Trình duyệt đã có sẵn một Javascriptengineđôi khi được gọi là "JavaScript virtual machine". | ||
| Những engine khác nhau thì sẽ có những "tên mã" khác nhau. Chẳng hạn: | ||
| - [V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) --trong Chromevà Opera. | ||
| - [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) --trong Firefox. | ||
| - ...Có một số tên mã khác là"Trident"và "Chakra"cho những phiên bản khác nhau củaIE, "ChakraCore"cho Microsoft Edge, "Nitro"và "SquirrelFish"cho Safari, etc. | ||
| Nên ghi nhớ các thuật ngữ trên bởi vì chúng được sử dụng khá nhiều trong các bài viết dành cho nhà phát triển (developer) trên Internet, và cả chúng ta. Ví dụ, nếu "tính năng Xđược hỗ trợ bởiV8",vậy nó có lẽ sẽ hoạt động trênChromevà Opera. | ||
| ```smart header="Engine hoạt động như thế nào?" | ||
| Engine khá phức tạp, tuy nhiên có thể hiểu đơn giản như sau: | ||
| 1.Engine (được nhúng nếu là trình duyệt) đọc ("phân tích cú pháp")tập lệnh. | ||
| 2.Tiếp theo nó chuyển đổi ("biên dịch")tập lệnh sang mã máy. | ||
| 3.Và sau đó mã máy chạy, khá nhanh. | ||
| Engine đều áp dụng tối ưu hóa ở các quy trình. Nó thậm chí còn xem tập lệnh được biên dịch khi đang chạy, phân tích dữ liệu chảy qua nó và áp dụng tối ưu hóa cho mã máy. Vì vậy tập lệnh có tốc độ khá nhanh sau khi được hoàn tất. | ||
| ``` | ||
| ##JavaScript có thể làm gì trong trình duyệt? | ||
| Javascript hiện đại là một ngôn ngữ lập trình "an toàn". Nó không cung cấp quyền truy cập cấp thấp vào bộ nhớ hayCPU,bởi vì ban đầu nó được tạo ra cho trình duyệt vốn dĩ không yêu cầu những điều đó. | ||
| Sức mạnh của Javascript phụ thuộc rất lớn vào môi trường mà nó đang hoạt động. Chẳng hạn, [Node.js](https://wikipedia.org/wiki/Node.js)hỗ trợ các hàm giúp cho Javascript có thể đọc/ghi các tập tin tùy ý, thực hiện các yêu cầu mạng, etc. | ||
| Javascript trong trình duyệt có thể làm mọi thứ có liên quan đến thao tác của trang web, tương tác với người dùng, và máy chủ web (webserver). | ||
| Ví dụ,JavaScripttrong trình duyệt có khả năng: | ||
| -ThêmHTMLmới vào trang, thay đổi nội dung có sẵn, sửa đổi phong cách (styles). | ||
| -Phản ứng với các hành động của người dùng, chạy khi nhấp chuột, chuyển động của con trỏ, nhấn phím. | ||
| -Gửi yêu cầu qua mạng đến các máy chủ từ xa, tải xuống và tải lên file (cái gọi là[AJAX](https://en.wikipedia.org/wiki/Ajax_(programming))và công nghệ[COMET](https://en.wikipedia.org/wiki/Comet_(programming)) ). | ||
| -Lấy và đặt cookie, đặt câu hỏi cho người truy cập, hiện tin nhắn. | ||
| -Ghi nhớ dữ liệu ở phía máy khách ("lưu trữ cục bộ -local storage"). | ||
| ##JavaScript không thể làm gì trong trình duyệt? | ||
| Nhiều tính năng của Javascript trong trình duyệt bị giới hạn vì lợi ích an toàn của người dùng. Mục đích là để ngăn chặn những trang web độc hại truy cập thông tin cá nhân hoặc gây hại đến dữ liệu của người dùng. | ||
| Một số hạn chế có thể kể là: | ||
| -Javascript trên trang web không thể đọc/ghi các tập tin tùy ý, sao chép hoặc thực thi một chương trình. Nó cũng không có cách nào trực tiếp truy cập vào các hàm hệ thống của Hệ điều hành. | ||
| Nhiều trình duyệt hiện đại cho phép làm việc với tập tin, nhưng bị giới hạn và chỉ được truy cập nếu như người dùng thực hiện một hành động nhất định nào đó, ví dụ như "thả" các tập tin vào cửa sổ trình duyệt hoặc chọn chúng qua thẻ`<input>`. | ||
| Có nhiều cách để tương tác vớicamera/microphonevà thiết bị khác, nhưng chúng yêu cầu sự cho phép rõ ràng của người dùng. Vì vậy, một trang web hỗ trợ Javascript sẽ không bật lén camera, quan sát và gửi thông tin cho [NSA](https://en.wikipedia.org/wiki/National_Security_Agency). | ||
| -Các tab/cửa sổ nhìn chung không biết gì về nhau. Thỉnh thoảng có, ví dụ như một cửa sổ dùng Javascript để mở cửa sổ khác. Nhưng kể cả như vậy, JavaScripttừ trang này vẫn không thể can thiệp vào trang kia nếu như chúng đến từ tên miền, giao thức hoặcport khác. | ||
| Cái này được gọi là"Same Origin Policy".Để làm việc với nó, *cả 2 trang web* cần phải đồng ý cho việc trao đổi dữ liệu và bao gồm cả các đoạn mã Javascript đặc biệt nhằm xử lí nó. Chúng ta sẽ nhắc đến trong phần hướng dẫn sau. | ||
| Hạn chế ở đây là, một lần nữa, cho an toàn của người dùng. Một trang web từ`http://anysite.com`mà người dùng vừa mở không được can thiệp vào trang web cóURLlà`http://gmail.com`ở tab khác với mục đích đánh cắp thông tin cá nhân. | ||
| -Javascript có thể dễ dàng giao tiếp qua mạng để đến máy chủ - nơi đang chứa trang web hiện tại. Nhưng khả năng nhận dữ liệu từ trang web khác hoàn toàn bị tê liệt. Mặc dù có thể, nó đòi hỏi phải có thỏa thuận rõ ràng (được thể hiện trongHTTP headers)từ phía điều khiển. Lại lần nữa, đây là giới hạn vì an toàn. | ||
|  | ||
| Những giới hạn trên sẽ không tồn tại nếu như Javascript được sử dụng bên ngoài trình duyệt, như máy chủ chẳng hạn. Các trình duyệt hiện đại cũng cho phép cácplugin/tiện ích có thể hỏi cho các quyền mở rộng. | ||
| ##Điều gì khiến cho Javascript khác biệt? | ||
| Có ít nhất *ba* điều tuyệt vời ở Javascript: | ||
| ```compare | ||
| +Tích hợp hoàn toàn với HTML/CSS. | ||
| +Những điều đơn giản được thực hiện một cách đơn giản. | ||
| +Được hỗ trợ bởi tất cả các trình duyệt chính và được bật theo mặc định. | ||
| ``` | ||
| Javascript là công nghệ trình duyệt duy nhất kết hợp cả 3 điều trên. | ||
| Đó là cách khiến cho Javascript khác biệt. Đó là cách tại sao nó là công cụ phổ biến nhất để tạo giao diện cho trình duyệt. | ||
| Trong khi đang lên kế hoạch tìm hiểu một công nghệ mới, việc kiểm tra các quan điểm của nó là có lợi. Vì vậy, hãy chuyển sang các xu hướng hiện đại ảnh hưởng đến nó, bao gồm các ngôn ngữ mới và khả năng của trình duyệt. | ||
| ##Những ngôn ngữ "trên nền tảng" JavaScript | ||
| Cú pháp của Javascript không phù hợp cho tất cả mọi người. Những người khác nhau lại muốn các tính năng khác nhau. | ||
| Đó là điều được mong đợi, vì các dự án và yêu cầu đều khác nhau đối với mọi người. | ||
| Vì vậy gần đây có rất nhiêu ngôn ngữ mới xuất hiện, chúng được *dịch mã* (chuyển đổi) sang Javascript trước khi chúng chạy trên trình duyệt. | ||
| Những công cụ hiện đại làm cho việc dịch trở nên nhanh chóng và minh bạch, thực sự cho phép các nhà phát triển viết mã bằng ngôn ngữ khác và tự động chuyển đổi nó trơn tru và hiệu quả. | ||
| Có thể kể đến một số ngôn ngữ: | ||
| - [CoffeeScript](http://coffeescript.org/)là một "cú pháp đặc biệt" cho JavaScript.Nó giới thiệu cú pháp ngắn hơn, cho phép chúng ta viết mã rõ ràng và chính xác hơn. Thông thường thì các nhà phát triển Ruby thích nó. | ||
| - [TypeScript](http://www.typescriptlang.org/)được tập trung cho việc "gõ dự liệu một cách nghiêm ngặt" nhằm đơn giản hóa việc phát triển và hỗ trợ các hệ thống phức tạp. Nó được phát triển bởi Microsoft. | ||
| - [Flow](http://flow.org/)cũng thêm một vài cách gõ dữ liệu, nhưng theo một cách khác. Phát triển bởi Facebook. | ||
| - [Dart](https://www.dartlang.org/)là một ngôn ngữ độc lập cóengineriêng và có thể chạy trong môi trường khác ngoài trình duyệt, nó cũng có thể được dịch sang Javascript. Phát triển bởi Google. | ||
| Sẽ có nhiều hơn số kể trên. Dĩ nhiên, ngay cả khi chúng ta sử dụng một trong những ngôn ngữ đó, chúng ta cũng nên biết Javascript để thực sự hiểu chúng ta đang làm gì. | ||
| ##Tổng kết | ||
| -Javascript được tạo ra với mục đích ban đầu chỉ cho trình duyệt, nhưng bây giờ đã được sử dụng rộng rãi trên nhiều môi trường khác. | ||
| -Ngày nay, Javascript có một vị trí khác biệt như là ngôn ngữ trình duyệt được sử dụng rộng rãi nhất với sự tích hợp đầy đủ với HTML/CSS. | ||
| -Có nhiều ngôn ngữ được "dịch" sang JavaScriptvà cung cấp một số tính năng nhất định. Nên xem qua chúng, ít nhất là một thời gian ngắn sau khi thành thạo JavaScript. |
4 changes: 2 additions & 2 deletions1-js/01-getting-started/index.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,3 @@ | ||
| #Lời mở đầu | ||
| Lời mở đầu về Javascript và môi trường phát triển của nó. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.