Hoisting trong Javascript | JavaScript nâng cao

Поделиться
HTML-код
  • Опубликовано: 19 сен 2024
  • 👉 Xem Lộ Trình Học: fullstack.edu....
    👉 Đăng Ký Học Offline Tại F8: short.f8team.d...
    Ở video tiếp theo này mình sẽ cùng các bạn tìm hiểu về khái niệm Hoisting trong Javascript | JavaScript nâng cao
    Hoisting cũng có thể được coi là khái niệm cơ bản trong Javascript. Tuy nhiên khái niệm này chưa phù hợp để đưa vào khóa cơ bản vì:
    - Các bạn sẽ thường thấy nhiều bài thử thách rất khó cho người mới khi áp dụng hoisting
    - Để hiểu đúng đắn về hoisting thì không phải người mới học nào cũng dễ dàng làm được
    - Theo mình, để "lean" cho người mới thì nên loại bỏ những kiến thức chưa cần thiết phải học trong khóa cơ bản
    Trên là những lý do tại sao mình đưa hoisting vào khóa JS nâng cao. Chúc các bạn học tập vui vẻ!
    #hoclaptrinh #hoclaptrinhmienphi #javascript #javascript_advanced #frontend #backend #devops #f8
    -------
    ☻ Phần mềm sử dụng trong video:
    Công cụ dịch Tiếng Anh: bit.ly/2Wsuhet
    Công cụ đo đạc giao diện web: s.net.vn/D8kL
    Công cụ viết CV xin việc chuyên nghiệp: mycv.vn
    --------------
    ☻ Khóa học lập trình web MIỄN PHÍ:
    Kiến thức nhập môn: fullstack.edu....
    Xây dựng giao diện với HTML, CSS: fullstack.edu....
    Xây dựng web responsive: fullstack.edu....
    Lập trình Javascript cơ bản: fullstack.edu....
    Lập trình Javascript nâng cao: fullstack.edu....
    Làm việc với Terminal & Ubuntu: fullstack.edu....
    Xây Dựng Website với ReactJS: fullstack.edu....
    Xây dựng web với Node & Express: fullstack.edu....
    HTML, CSS tips: fullstack.edu....
    Ứng dụng cảnh báo khi sờ lên mặt: fullstack.edu....
    Xem thêm tại: fullstack.edu....
    -------------------------------------
    F8 Official
    (c) Sơn Đặng
    Website: fullstack.edu.vn
    Facebook cá nhân: / sondnf8
    Nhóm Học Lập Trình Web: / f8official
    Email: contact@fullstack.edu.vn
    © Bản quyền thuộc về Channel F8 Official ☞ Do not Reup
    © Nghiêm cấm sử dụng video nhằm mục đích thương mại dưới mọi hình thức.

Комментарии • 78

  • @F8VNOfficial
    @F8VNOfficial  3 года назад +47

    *Lưu ý:* Biến được khai báo với var & function declaration được khai báo trong code block sẽ được hoisted phần hàm trong chính block đó và hoisted tên hàm ra ngoài block.
    // Ví dụ 1:
    console.log(sum) // undefined
    {
    sum(1, 2) // 3
    function sum(a, b) {
    return a + b
    }
    }
    // Ví dụ 2:
    sum(1, 2) // sum is not a function
    {
    function sum(a, b) {
    return a + b
    }
    }
    Hoisting là đặc tính của ngôn ngữ luôn tồn tại khi bạn code rồi, học để hiểu về cách hoạt động của ngôn ngữ. Với function declaration thì nó giúp bạn có thể sử dụng được trước khi khai báo đó. Với var, let, const thì học để hiểu cách hoạt động, khi code thì ko ai đi dùng biến trước khi khai báo cả (gây khó đọc code - người đọc khó hiểu).
    *Anh em thấy chất lượng video như này đã ổn hơn chưa? Có cần cải thiện gì nữa không? Mong nhận thêm góp ý từ anh em 😍*

    • @trantuanat524
      @trantuanat524 3 года назад

      Quá tuyệt vời rồi anh

    • @atcong9155
      @atcong9155 3 года назад

      Quá chất lượng luôn anh.

    •  3 года назад +1

      biết ngay mà. Thấy cái mic rồi nha :)

    • @huuong7758
      @huuong7758 3 года назад +1

      thêm vài ví dụ nữa là ngon anh ạ. Tổng quan thì perfect

    • @vuduynhien38
      @vuduynhien38 3 года назад

      tuyệt vời anh ơi

  • @vuduynhien38
    @vuduynhien38 3 года назад +3

    mong ngóng từng video của anh, rất rất yêu anh

  • @maily2270
    @maily2270 3 года назад +2

    Hay quá anh, nhiều khi mình biết cách nó hoạt động nhưng chưa hiểu được bản chất vấn đề, nhờ video của anh mà em được hiểu nhiều hơn

  • @Zero_Kid
    @Zero_Kid 3 года назад +4

    Coi đến phần này hay này, kiếm thêm mấy ví dụ nữa là hiểu thêm nè. Cảm ơn bạn nhiều

  • @NamTran-ik8st
    @NamTran-ik8st 3 года назад +3

    video rất hay anh ạ, vừa có tâm vừa có tầm là anh.

  • @nguyenthien1561
    @nguyenthien1561 3 года назад +2

    mong anh cho thật nhiều những ví dụ lời khuyên thực tế để có thể áp dụng khi đi làm. Em học hết từ anh, em chuẩn bị xin đi thực tập mà cứ thấy mình biết ít quá :(((

  • @hungteacher
    @hungteacher 3 года назад +2

    video đỉnh anh ơi, mà a đừng thức khuya qá, dạo này thấy anh ốm hơn thì phải.

  • @phamquoc3449
    @phamquoc3449 2 года назад +3

    Chào mng, anh Sơn cho em hỏi:
    arrow function không được hoist, sao function c khai báo sau function a, mà function a vẫn gọi được function c bên trong
    const a= ()=>{
    c()
    }
    const c=()=>{
    console.log('run c')
    }
    a()

    • @F8VNOfficial
      @F8VNOfficial  2 года назад +4

      Thời điểm gọi a() thì hàm c đã được khai báo rồi mà em

  • @SangNguyen-lt9om
    @SangNguyen-lt9om 3 года назад +2

    Cảm ơn anh đã chia sẻ :D

  • @dinhhuuloc
    @dinhhuuloc 3 года назад +2

    Anh ơi, có lịch ra video không anh, cho tụi em xin mà hóng với anh :D

  • @tan2cang93
    @tan2cang93 2 года назад

    giờ đã hiểu lý do tại sao cần phải có hosting rồi. cảm ơn anh đã chia sẻ

  • @phanhaiang7052
    @phanhaiang7052 3 года назад +2

    làm về typescript đi anh

  • @MinhVu-kj5zn
    @MinhVu-kj5zn 3 года назад +2

    Video rất hay ạ

  • @KhoaPham-sm1uf
    @KhoaPham-sm1uf 2 года назад

    Video chi tiết quá, cảm ơn a Sơn.

  • @NamangMinh1
    @NamangMinh1 3 года назад +1

    em cảm ơn anh nhé

  • @datwilliama2
    @datwilliama2 3 года назад

    background mới xịn quá anh

  • @sontranvan5348
    @sontranvan5348 3 года назад +3

    Every failure is a lesson learned😁😁😁

  • @arttorch
    @arttorch Год назад

    Hay quá , thế mới là hảo hán

  • @imlava5464
    @imlava5464 3 года назад +3

    Anh cho em hỏi là nếu const, let cũng được hoisting thì tại sao trường hợp này lại không chạy được.
    a=1;
    let a;
    console.log(a)
    Vì trong bài giới thiệu ES6 về let, const em nhớ anh nói là let, const không được hỗ trợ hoisting.
    Thanks anh.

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +5

      Trong khoá cơ bản a có note ở phần ghi chú là vì là khoá cơ bản nên a k đề cập tới việc hoisting của let và const nên tạm coi nó là ko hosting cho đơn giản. Còn điều e thắc mắc a giải thích trong video rồi mà. Vì nó nằm ở temp dead zone nên đc hosting vẫn k xài đc e. Nó hosting nhằm mục đích có mặt trong scope thôi e

    • @imlava5464
      @imlava5464 3 года назад

      @@F8VNOfficial Tại em hiểu theo anh nói là khi được hoisting, vì nó k mang giá trị trên nó bị đẩy vào Temp Dead Zone, nhưng bản chất là em có gán giá trị thì mặc định nó vẫn bị đẩy vào Temp Dead Zone đúng k ạ.

    • @chanhchung3550
      @chanhchung3550 2 года назад +3

      @@imlava5464 Theo mình biết thì: Một biến trong chương trình khi được sử dụng sẽ phải trải qua 2 giai đoạn: (1) khai báo và (2) khởi tạo. Ở đây khai báo là bạn sẽ ghi ra là let a; sau khi biến được khai báo xong thì mình mới có thể khởi tạo giá trị cho biến đó. a = 1; Đối với const và let vẫn được hosting, lúc này các biến kiểu const, let trước khi được khai báo và khởi tạo thì nó sẽ được đưa vào vùng TDZ, lí do được hoisting là JS sẽ throw ra 1 error "Cannot user xxx before it initialization" vì nó detect được biến đó có tồn tại trong phạm vi đó nhưng chưa được khởi tạo để thoát khỏi vùng TDZ

  • @lordsaurondevoffical363
    @lordsaurondevoffical363 2 года назад

    chắc học cách js thực thi mới hiểu được cách anh nói ,

  • @LHQQ888
    @LHQQ888 2 года назад

    Cảm ơn anh Sơn

  • @lannguyen538
    @lannguyen538 3 года назад

    Hay a ơi, ra nhiều video nữa a nhé (y)

  • @quanphamanh957
    @quanphamanh957 3 года назад

    Em cảm ơn anh ạ

  • @QuanNguyen-wc2hm
    @QuanNguyen-wc2hm Год назад

    hoisting với var và function đưa phần khai báo lên trên đầu phạm vi và được khởi tạo giá trị mặc định là undefine
    let va const có được hoisting lên nhưng mà nó không mang giá trị và sẽ được đưa vào vùng không truy cập được

  • @minhthuanpham571
    @minhthuanpham571 2 года назад

    hay quá a ơi

  • @hautran7559
    @hautran7559 3 года назад

    video bổ ích ạ

  • @khanhtran3761
    @khanhtran3761 3 года назад

    Tuyệt vời!

  • @chienphung9633
    @chienphung9633 Год назад

    cho em hỏi là học cái này để làm gì ạ, hay chỉ phục vụ cho việc trả lời phỏng vấn thôi

  • @thanhnhanmai1924
    @thanhnhanmai1924 Год назад

    Hi anh Sơn,
    var fullName = "nguyen van a"
    {
    console.log(fullName)
    var fullName = "ngyen van b"
    }
    E có đoạn code này cho e hỏi sao lúc e chạy nó lại ra là "nguyen van a"
    Theo e học thì trong scope thì var fullName phải là undefined.Mong a trả lời giúp e !

    • @lightd1404
      @lightd1404 Год назад

      Lưu ý: Biến được khai báo với var & function declaration được khai báo trong code block sẽ được hoisted phần hàm trong chính block đó và hoisted tên hàm ra ngoài block. A sơn có lưu ý như này k biết có đúng ý b muốn giải thích khum =))

  • @vannamofficial3279
    @vannamofficial3279 3 года назад +1

    Mn cho mk hỏi có nên hk c++ trc để có tư duy k ạ hay học luôn js trc cx đc ạ

    • @tranuchieu1718
      @tranuchieu1718 3 года назад +3

      luôn js gây lú bạn lên quất c++ trc để hiểu rõ cách hoạt động và làm quen vs lập trình và có tư duy nhé

  • @tuyentrancong3646
    @tuyentrancong3646 3 года назад

    Thêm currying nữa a ơi

  • @tayang7527
    @tayang7527 3 года назад +1

    anh ơi, em viết đoạn này nhưng chạy ra hai kết quả khác nhau, đọc tài liệu em thấy nó thích giải thích v từ khoá this của các hàm javascript.info/arrow-functions#arrows-have-no-arguments
    const matchs = (object1, object2) => {
    return Object.keys(object2).every(key =>
    object1.hasOwnProperty(key) && object1[key] === object2[key]
    );
    }// true
    const matches = function (object1, object2) {
    return Object.keys(object2).every(function (key) {
    object1.hasOwnProperty(key) && object1[key] === object2[key]
    })
    }// false
    const user = {
    name: 'tay dang',
    age: 20,
    address: 'vn',
    phone: '123456'
    }
    const info = {
    address: 'vn',
    phone: '123456'
    }
    console.log(matches(user, info))

    • @sevenup139
      @sevenup139 Год назад

      bỏ cái thói code tắt đi là hiểu tại sao

    • @htuanqn
      @htuanqn 6 дней назад

      trời ạ, cái hàm matches() ông phải return kết quả là true hay false thì bên ngoài nó mới nhận được chứ. Còn hàm matchs() thì dùng arrow function kiểu trực tiếp mà không dùng {} như vậy là nó return luôn cho ông rồi
      Kết luận: 1 hàm có return và 1 hàm ko có return, bảo sao kết quả nó không khác.

  • @phattruongtan6104
    @phattruongtan6104 3 года назад

    Cho em hỏi, lúc 10:34 nếu function increase được hoist lên đầu như vậy thì tại sao `++counter` lại không phải là 'dùng trước khi khai báo' và `counter` không được hoist lên ạ? Em đã nghĩ nó sẽ ra lỗi không thể truy cập vì chưa khai báo (temp dead zone) cơ:V

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +3

      Đoạn đó ++counter nằm trong hàm khác mà em, thời điểm gọi hàm là sau khi biến counter được khai báo.

    • @ongkhong5885
      @ongkhong5885 Год назад

      Anh ơi giờ anh hiểu chưa ạ

    • @ongkhong5885
      @ongkhong5885 Год назад

      Hiểu rồi dạy cho em với

  • @chien6245
    @chien6245 3 года назад

    anh cho e hỏi, vậy thứ tự của các biến,hàm sau khi hoisting là như thế nào ạ, có phải cái khai báo cuối sẽ ở trên đầu tiên phạm vi đúng không ạ.

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +2

      function declaration nằm dưới var e nhé

  • @tamdongnhatanh6307
    @tamdongnhatanh6307 3 года назад

    Hi anh, em gặp câu hỏi này nhưng chưa nghĩ ra tại sao output là...
    function bigBrother(){
    function littleBrother() {
    return 'it is me!';
    }
    return littleBrother();
    function littleBrother() {
    return 'no me!';
    }
    }
    bigBrother();

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +3

      Có 2 hàm declaration trùng tên (littleBrother) nhau em, hàm số 2 nó khai báo sau nên khi hoisted nó nằm dưới nên ưu tiên hơn. Hàm declaration có thể khai báo nhiều hàm trùng tên, cái mới nhất sẽ ưu tiên hơn. Cái này hình như anh nói từ JS cơ bản rồi mà.

    • @tamdongnhatanh6307
      @tamdongnhatanh6307 3 года назад

      @@F8VNOfficial thanks anh ạ, em đi xem lại!

    • @F8VNOfficial
      @F8VNOfficial  3 года назад +1

      Trong bài "hiểu hơn về function" ý em nhé

  • @thanhtrantan6317
    @thanhtrantan6317 Год назад

    Video rất hay và trực quan.

  • @noras9835
    @noras9835 3 года назад

    Great video!, thanks alot!

  • @KienNguyen-sg1nf
    @KienNguyen-sg1nf 3 года назад

    Ok la rồi anh

  • @nguyenchuong4861
    @nguyenchuong4861 3 года назад

    Anh Sơn cho em hỏi là tại sao ô cam anh không để vuông mà để tròn vậy anh :v

    • @phecode2132
      @phecode2132 3 года назад +3

      Vuông chiếm nhiều diện tích hơn e ơi

  • @thang8617
    @thang8617 3 года назад

    7:23 why is the "undefined"?

    • @tranuchieu1718
      @tranuchieu1718 3 года назад

      như anh nói thôi cái này nó là khai báo ra giống hois của var và đưa vào bộ nhớ ý còn let trc khi sd thì đưa vào dead zone (tạm thời k thể sử dụng)

    • @tranuchieu1718
      @tranuchieu1718 3 года назад

      let vs const thì nó như kiểu trình biên dịch nó tưởng thăng ăn trộm nó phát hiện đc ra và ném vào phần nghi ngờ trong bộ não nhưng chưa chắc chắn lên chưa nói ra

    • @thang8617
      @thang8617 3 года назад

      @@tranuchieu1718 ok, i see

  • @otruonghoangnhat7951
    @otruonghoangnhat7951 3 года назад +1

    Trong C va C++ co hoisting k nhi mn ?

    • @kozaxlh
      @kozaxlh 3 года назад +2

      không nha bạn. bắt buộc phải khai báo biến hoặc hàm trước thì mới được gọi hay thao tác.

    • @thuanvo9283
      @thuanvo9283 3 года назад

      Không có đâu bạn ơi.

  • @nnhff2132
    @nnhff2132 3 года назад

    Hello anh em 2k9

  • @thehien.
    @thehien. 3 года назад

    rất hay anh ạ