kiến thức [Event Tặng Title] Hướng dẫn học Javascript từ 0-> Nâng cao.

Chủ thớt mà duy trì dc cái thớt này lâu lâu thì sang đầu năm tôi xin cho cái title. Nhưng phải lâu + nhiều bài nhé. Ít bài thì chịu :LOL:
ok tks fen nhé. Tôi đợt này cũng rỗi hơn (do covid) mấy boss Châu Âu k sang được nên đỡ phải họp hành -> Mới rảnh thế này. Các bố ấy mà sang như thời chưa covid thì đúng nghĩa "tối mặt tối mũi với công việc"
...Nhưng bận mấy tôi cũng sẽ cố gắng :D
 
Cơ chế Hoisting

hois.png


// Nếu bạn đi phỏng vấn, leader có hỏi về Hoisting thì cứ nói như mình:
"E viết code chỉ khai báo biến bằng let và const anh ơi. Mà let với const làm gì chấp nhận cơ chế hoisting? Kể cả là biểu thức hàm (function expression) nó cũng không chấp nhận".
. Auto leader gật gù và không hỏi thêm về hoisting nữa. Tự tin leader hỏi đến đâu chốt hạ vấn đề đến đấy. Hỏi đến lương chốt luôn 350 củ :boss: bao ngàu

Có một cơ chế hoisting cho function

JavaScript:
hoisted(); // Output: "Hello hoisting, I am here"
 function hoisted() {
console.log('Hello hoisting, I am here ');
};

Javascript cho phép bạn gọi một hàm trước khi khởi tạo hàm đó. đấy là nhờ cơ chế hoisting. Mục đích cũng chẳng có gì khác ngoài việc làm cho việc viết code mềm dẻo hơn. Kiểu như dùng trước thông báo sau. Nhưng cái gì thì cái, hãy làm code của bạn chặt chẽ.

CHỐT: Dùng cái gì thì cũng khởi tạo, khai báo trước. Còn JS nó có cơ chế như này nên tránh xa. Vì tác giả của JS ổng ý ban đầu cũng chỉ nghĩ là tạo ra cơ chế này giúp chạy JS nó mềm dẻo hơn (đấy là thuở mà JS quá sơ khai). Chứ như bây giờ JS làm được rất rất nhiều việc, code to bự mà k chặt chẽ là mệt lắm. Fix bug này, mở rộng này, chuyển giao này....ti tỉ việc. Code có tuần tự, cấu trúc rõ ràng làm gì cũng trở nên đơn giản hơn.
 
Last edited:
________TẠM KẾT THÚC JS CƠ BẢN----------

Bây giờ chúng ta sẽ đế phần JS nâng cao. Ở phần này chúng ta sẽ làm quen với rất nhiều khái niệm nâng cao của JS như:
  • Functional Programming
  • Scope and Execution Context
  • Inheritance + Prototype Chain
  • JS pattern
  • Asynchronous JavaScript + Event Loop
  • JavaScript Modules
  • JavaScript Engine and Runtime
  • Error Handling
  • Stack Overflow
  • Memory Leaks
  • Composition vs Inheritance
  • Type Coersion
  • Pass By Reference vs Pass by Value
  • Higher Order Functions
  • IIFE
  • .call(), .apply(), .bind()
  • Interpreter/ Compiler/ JIT Compiler
  • Garbage Collection
Để đi vào cụ thể, chúng ta cùng làm một dự án thực tế luôn. Vừa làm vừa học ...cho thấm.
Vừa làm vừa học mới đỡ chán và trong quá trình làm đụng phải lý thuyết nâng cao như list trên mình sẽ giải thích đến đấy. Lần lượt ok không các fen?
 
________TẠM KẾT THÚC JS CƠ BẢN----------

Bây giờ chúng ta sẽ đế phần JS nâng cao. Ở phần này chúng ta sẽ làm quen với rất nhiều khái niệm nâng cao của JS như:
  • Functional Programming
  • Scope and Execution Context
  • Inheritance + Prototype Chain
  • JS pattern
  • Asynchronous JavaScript + Event Loop
  • JavaScript Modules
  • JavaScript Engine and Runtime
  • Error Handling
  • Stack Overflow
  • Memory Leaks
  • Composition vs Inheritance
  • Type Coersion
  • Pass By Reference vs Pass by Value
  • Higher Order Functions
  • IIFE
  • .call(), .apply(), .bind()
  • Interpreter/ Compiler/ JIT Compiler
  • Garbage Collection
Để đi vào cụ thể, chúng ta cùng làm một dự án thực tế luôn. Vừa làm vừa học ...cho thấm.
Vừa làm vừa học mới đỡ chán và trong quá trình làm đụng phải lý thuyết nâng cao như list trên mình sẽ giải thích đến đấy. Lần lượt ok không các fen?
tuyệt vời quá thím ơi :)
 
________TẠM KẾT THÚC JS CƠ BẢN----------

Bây giờ chúng ta sẽ đế phần JS nâng cao. Ở phần này chúng ta sẽ làm quen với rất nhiều khái niệm nâng cao của JS như:
  • Functional Programming
  • Scope and Execution Context
  • Inheritance + Prototype Chain
  • JS pattern
  • Asynchronous JavaScript + Event Loop
  • JavaScript Modules
  • JavaScript Engine and Runtime
  • Error Handling
  • Stack Overflow
  • Memory Leaks
  • Composition vs Inheritance
  • Type Coersion
  • Pass By Reference vs Pass by Value
  • Higher Order Functions
  • IIFE
  • .call(), .apply(), .bind()
  • Interpreter/ Compiler/ JIT Compiler
  • Garbage Collection
Để đi vào cụ thể, chúng ta cùng làm một dự án thực tế luôn. Vừa làm vừa học ...cho thấm.
Vừa làm vừa học mới đỡ chán và trong quá trình làm đụng phải lý thuyết nâng cao như list trên mình sẽ giải thích đến đấy. Lần lượt ok không các fen?
đc quá. Cuối cùng cũng tới Functional Programming
 
________TẠM KẾT THÚC JS CƠ BẢN----------

Bây giờ chúng ta sẽ đế phần JS nâng cao. Ở phần này chúng ta sẽ làm quen với rất nhiều khái niệm nâng cao của JS như:
  • Functional Programming
  • Scope and Execution Context
  • Inheritance + Prototype Chain
  • JS pattern
  • Asynchronous JavaScript + Event Loop
  • JavaScript Modules
  • JavaScript Engine and Runtime
  • Error Handling
  • Stack Overflow
  • Memory Leaks
  • Composition vs Inheritance
  • Type Coersion
  • Pass By Reference vs Pass by Value
  • Higher Order Functions
  • IIFE
  • .call(), .apply(), .bind()
  • Interpreter/ Compiler/ JIT Compiler
  • Garbage Collection
Để đi vào cụ thể, chúng ta cùng làm một dự án thực tế luôn. Vừa làm vừa học ...cho thấm.
Vừa làm vừa học mới đỡ chán và trong quá trình làm đụng phải lý thuyết nâng cao như list trên mình sẽ giải thích đến đấy. Lần lượt ok không các fen?
Bác cho em ib để nhờ bác hướng dẫn về C++ được không ạ, em cảm ơn ạ.
 
Trong khi chờ đợi tôi, ae có thể tìm hiểu về Lambda Calculus nhé. Nó là cơ sở để chúng ta giải phẫu functional programming.

Lý do tại sao tôi đưa functional programming vào trong hướng dẫn học JS. Nó xuất phát từ việc, bản thân JS là ngôn ngữ hỗ trợ OOP chưa đầy đủ. Vì thế, FP sẽ lấp cho những khuyết thiếu OOP trong JS. Chúng ta sẽ có một project mà trong đấy là sự kết hợp mềm mại, ăn ý giữa FP và OOP. :p

...Tôi sẽ rất rất cố gắng thu xếp để sớm trở lại. Đợt này con gái nhỏ của tôi (cháu mới có 2 tháng) tuổi, đang giai đoạn khủng hoảng nên ngoài thời gian làm trên cty thì về nhà tôi là ông bố bỉm sữa. Rất là bận, cháu nó qua giai đoạn khủng hoảng thì mới có thời gian suy tư và viết tiếp.
 
Đã Bookmark, học cơ bản xong tới phần nâng cao rồi bỏ cuộc mấy lần rồi @_@, lần này quyết tâm cố gắng @_@.
 
dù đã học qua JS cơ bản nhưng nhờ bác mà em đã ngộ ra vài điều mà mình vẫn chưa hiểu kĩ
8q8ZzYY.png

chờ khóa nâng cao của bác
 
Có hai mô hình lập trình phổ biến là imperative declarative, mỗi ngôn ngữ lại có thiên hướng theo một trong hai nhánh mô hình lập trình như hình mô tả dưới đây. Vậy thì JS thực sự nó theo thiên hướng nào?
hzvq76G5Y.png

Câu trả lời là:
"JavaScript can function as both a procedural and an object oriented language" - theo mozilla.org. Vậy chính xác JS thuộc họ nhà imperative. Nghĩa là chẳng dính dáng gì đến họ nhà declarative ấy thế mà chúng ta lại đi cố tình đưa các triết lý của declarative vào JS. Vậy chẳng lẽ là áp đặt và gượng ép? Quả thực là JS vốn không phải ngôn ngữ sinh ra đã hỗ trợ cho functional programming (FP). Nhưng sau nhiều lần tiến hóa thì đến nay JS đã có những cải tiến để tương thích với các faner của FP qua một loạt thay đổi từ ES6 điển hình là bổ sung arrow function và const. Tóm lại lập trình FP trong JS nghĩa là ta sẽ bê nguyên các triết lý của mô hình FP với các hỗ trợ có sẵn của JS để triển khai. Mặc dù JS ngay đến bản ES6 này chỉ hỗ trợ lập trình FP tương đối nhưng với quan điểm cá nhân của tôi thì "nó cũng ổn đấy"
Nhắc lại thế nào là lập trình FP:
Lập trình chức năng (Functional programming) là một dạng của lập trình khai báo nhưng có chiều sâu hơn nghĩa là trong lập trình FP thì bạn đưa bài toán cho máy tính giải quyết (cái vấn đề bạn cần), song song là ẩn chứa ra cách giải quyết (như thế nào) kèm theo đó là coi việc tính toán là việc triển khai các hàm toán học chủ đích là để thực thi chương trình và tránh các dữ liệu, các trạng thái, luồng chương trình bị thay đổi. FP được hình thành từ cơ sở toán học lambda calculus.

Vì đây là seri viết về JS nên tôi sẽ chỉ tóm tắt nhanh thế nào là lập trình FP thôi.cụ thể thì các bạn cần dành nhiều thời gian nghiên cứu.

Bạn có thể xem ví dụ dưới đây:
1636552608827.png


Khi bạn đưa triết lý FP vào JS nghĩa là bạn sẽ tạm biệt luôn những thứ dưới đây vốn rất quen thuộc với bạn:
  • Loops
    • while
    • do...while
    • for
    • for...of
    • for...in
  • Variable declarations with var or let
  • Conditionals (if, else)

  • Void functions
  • Object mutation.
  • Array mutator methods
    • copyWithin
    • fill
    • pop
    • push
    • reverse
    • shift
    • sort
    • splice
    • unshift
  • Map mutator methods
    • clear
    • delete
    • set
  • Set mutator methods
    • add
    • clear
    • delete
Thay vào đó là chúng ta sẽ sử dụng các hàm toán học để tung hứng, kết hợp và tạo ra luồng chạy cho chương trình. Ngầm chỉ dẫn cho máy tính thực hiện ý đồ lập trình của bạn và máy tính trả kết quả theo đúng kết quả bạn mong muốn.

Cụ thể, mời các bạn xem phần 2 nhé.
 
Last edited:
Có hai mô hình lập trình phổ biến là imperative declarative, mỗi ngôn ngữ lại có thiên hướng theo một trong hai nhánh mô hình lập trình như hình mô tả dưới đây. Vậy thì JS thực sự nó theo thiên hướng nào?
View attachment 861437
Câu trả lời là:
"JavaScript can function as both a procedural and an object oriented language" - theo mozilla.org. Vậy chính xác JS thuộc họ nhà imperative. Nghĩa là chẳng dính dáng gì đến họ nhà declarative ấy thế mà chúng ta lại đi cố tình đưa các triết lý của declarative vào JS. Vậy chẳng lẽ là áp đặt và gượng ép? Quả thực là JS vốn không phải ngôn ngữ sinh ra đã hỗ trợ cho functional programming (FP). Nhưng sau nhiều lần tiến hóa thì đến nay JS đã có những cải tiến để tương thích với các faner của FP qua một loạt thay đổi từ ES6 điển hình là bổ sung arrow function và const. Tóm lại lập trình FP trong JS nghĩa là ta sẽ bê nguyên các triết lý của mô hình FP với các hỗ trợ có sẵn của JS để triển khai. Mặc dù JS ngay đến bản ES6 này chỉ hỗ trợ lập trình FP tương đối nhưng với quan điểm cá nhân của tôi thì "nó cũng ổn đấy"
Nhắc lại thế nào là lập trình FP:
Lập trình chức năng (Functional programming) là một dạng của lập trình khai báo nhưng có chiều sâu hơn nghĩa là trong lập trình FP thì bạn đưa bài toán cho máy tính giải quyết (cái vấn đề bạn cần), song song là ẩn chứa ra cách giải quyết (như thế nào) kèm theo đó là coi việc tính toán là việc triển khai các hàm toán học chủ đích là để thực thi chương trình và tránh các dữ liệu, các trạng thái, luồng chương trình bị thay đổi. FP được hình thành từ cơ sở toán học lambda calculus.

Vì đây là seri viết về JS nên tôi sẽ chỉ tóm tắt nhanh thế nào là lập trình FP thôi.cụ thể thì các bạn cần dành nhiều thời gian nghiên cứu.

Bạn có thể xem ví dụ dưới đây:
View attachment 861597

Khi bạn đưa triết lý FP vào JS nghĩa là bạn sẽ tạm biệt luôn những thứ dưới đây vốn rất quen thuộc với bạn:
  • Loops
    • while
    • do...while
    • for
    • for...of
    • for...in
  • Variable declarations with var or let
  • Void functions
  • Object mutation.
  • Array mutator methods
    • copyWithin
    • fill
    • pop
    • push
    • reverse
    • shift
    • sort
    • splice
    • unshift
  • Map mutator methods
    • clear
    • delete
    • set
  • Set mutator methods
    • add
    • clear
    • delete
Thay vào đó là chúng ta sẽ sử dụng các hàm toán học để tung hứng, kết hợp và tạo ra luồng chạy cho chương trình. Ngầm chỉ dẫn cho máy tính thực hiện ý đồ lập trình của bạn và máy tính trả kết quả theo đúng kết quả bạn mong muốn.

Cụ thể, mời các bạn xem phần 2 nhé.
Em chưa tìm hiểu sâu về Functional Programming là gì, là ntn nhưng đoạn đến đoạn "Khi bạn đưa triết lý FP vào JS nghĩa là bạn sẽ tạm biệt luôn những thứ dưới đây vốn rất quen thuộc với bạn"
Vậy khi code theo kiểu FP là mình ko nên sử dụng vòng lặp for để tính toán trực tiếp mà thay vào đó là phải tạo 1 function truyền tham số vào để xử lý đoạn for đó và trả về kết quả hả bác.
 
Back
Top