Làm thế nào để bạn truy cập bên ngoài này trong javascript?
[00. 02. 05] Được rồi, bỏ qua cuộc chạm trán đã được lưu, mặc dù chúng tôi sẽ không sử dụng nó bên trong. Thay vào đó, chúng tôi sẽ lấy mã của nó hoặc nếu bạn nhớ từ phần heap của mình, chúng tôi sẽ lấy nhãn của nó dưới chức năng lưu trữ mui xe. Xin lỗi, hãy giải quyết nếu nó nằm dưới mui xe, chức năng và bảng được lưu trữ nhưng với chúng tôi vì mục đích của chúng tôi, hãy lấy mã của bộ đếm gia tăng [00. 02. 30] Chúng ta sẽ xem cái gì, chúng ta sẽ làm gì Jasmine? . Chúng tôi sẽ không chạy bộ đếm gia tăng, chúng tôi sẽ? [00. 02. 54] [00. 03. 12] [00. 03. 33] Mọi người hãy chạy nó và xem điều gì sẽ xảy ra. Chức năng mới được gọi là thương hiệu, vâng, mọi người cùng nhau, thương hiệu mới? [00. 03. 59] Chúng tôi đi vào nó, không có gì trong bộ nhớ cục bộ được chỉ định. Thay vào đó, chúng tôi nhấn ngay dòng nào, Jasmine? [00. 04. 23] Một lần nữa, câu hỏi tương tự với bạn một lần nữa, có gì ở đó không? [00. 04. 47] Tôi có quyền truy cập vào nội dung bên ngoài nơi nó đang chạy. Tôi có thể nói rằng tôi có thể đến và tìm quầy tiếp theo ở đâu? [00. 05. 03] [ÂM THANH] Chúng tôi không thể lấy lại chủ đề của chúng tôi trong đó đã thực hiện xong lời đe dọa hành quyết của chúng tôi đã đi vào, quay trở lại và nó đã biến mất. Và bây giờ chúng ta đang ở bên trong chức năng mới. Vì vậy, chúng tôi đang chạy một chức năng mới trong toàn cầu. Vì vậy, Jasmine, chúng ta có thể tìm quầy ở đâu? [00. 05. 22] Về lý thuyết, nghe có vẻ phù hợp với tôi [00. 05. 55] Cho rằng đây không phải là trọng tâm chính của bài nói chuyện này, chúng tôi muốn sử dụng. Đối với một tính năng rất mạnh mẽ, tôi sẽ không bàn sâu về vấn đề này, nhưng tôi sẽ không để chúng ta phải chịu đựng quá lâu. Thay vào đó, tôi sẽ kể cho bạn nghe về một điều mạnh mẽ xảy ra khi tôi trả về một chức năng khi một chức năng khác đang chạy [00. 06. 20] Đặt cho nó một nhãn toàn cầu và chạy nó bằng nhãn toàn cầu mới của nó. Một cái gì đó rất đặc biệt xảy ra. Tôi không chỉ nhận được mã của hàm bộ đếm tăng được trả về hàm mới. Tôi mang theo mã chức năng của mình một thứ khác. Ở mặt sau của chức năng này đi kèm, [00. 07. 06] Nó mang theo nó được gắn vào nó ở mặt sau của chức năng. Và đây là ở mặt sau của chức năng, nó là một chiếc ba lô nhỏ khi chức năng được kéo ra, nó sẽ kéo nó trên lưng. Dữ liệu xung quanh từ khi nó được sinh ra và nhìn vào đó [00. 07. 26] Có số 0 đi kèm với bộ đếm và chúng ta sẽ nói về việc liệu có tên chính thức nào khác ngoài ba lô hay không. Tôi sẽ nói với bạn điều này sau khi ai đó xem cuộc nói chuyện này và viết một bài đăng trên blog về nó có 50.000 lượt thích, nghĩa là thuật ngữ này ngày càng phổ biến hơn có thể là đặc điểm kỹ thuật của JavaScript, không bao giờ, nhưng có thể nó được đính kèm trên hàm, nghĩa là Jasmine, [00. 08. 04] Trước khi tôi nhìn ra toàn cầu, có thể có một nơi nào khác và bạn có thể sử dụng từ này. Bạn có thể nói từ nó bắt đầu bằng b và kết thúc ngược lại. Jasmine có nơi nào khác mà bạn nghĩ rằng JavaScript sẽ thực hiện hành trình tra cứu trước khi nó tìm kiếm bộ đếm trên toàn cầu không? [00. 08. 22] [00. 08. 44] [00. 09. 08] Nó siêu mạnh [00. 09. 36] Chúng tôi tìm thấy trong lệnh gọi tiếp theo tới bộ đếm chức năng mới plus plus, Eric, nhân tiện, tôi tìm bộ đếm ở đâu trước, xin nói rõ, đây là ngữ cảnh thực thi chức năng mới mới trên ngăn xếp cuộc gọi. Tôi đã xóa nó và đặt lại. Và tôi nên tìm ở đâu trước, Eric? [00. 10. 00] [00. 10. 14] [00. 10. 45] Điều này cho phép các chức năng của chúng tôi có hai loại vị trí để lưu trữ dữ liệu, một nơi lưu trữ tạm thời để thực hiện một lần, chạy một lần và một nơi lưu trữ vĩnh viễn, miễn là mã của chức năng được lưu. Thêm chức năng không chỉ là mã nữa, nó lưu mã dưới nhãn chức năng mới ban đầu là mã bộ đếm gia tăng cộng với dữ liệu liên tục được đính kèm với nó mà chúng ta có quyền truy cập bằng cách tạo tham chiếu trong bộ đếm tăng biên giới chức năng mới cho thứ gì đó không có trong bộ nhớ cục bộ [00. 11. 21] Vì vậy, chúng tôi nhảy ra ngoài và tìm trong ba lô và miễn là khi chúng tôi sinh ra khi chúng tôi tạo chức năng hiện được gọi là mới. Chức năng bắt nguồn từ cuộc gặp gỡ. Chúng tôi có xung quanh nó trong bộ nhớ cục bộ, bộ đếm lưu bằng 0, được kéo ra ở mặt sau của chức năng thành chức năng mới [00. 11. 41] Và đó là gắn bó, đó là gắn bó mọi người. Vì vậy, tôi sẽ. [SOUND] Tôi sẽ giải quyết vấn đề này một lần nữa định nghĩa của chức năng mới, mã của nó, mã đã lưu của nó hiện có một liên kết ẩn. Ẩn, tốt, đó là lý do tại sao tôi phải nói với bạn một vài điều quan trọng hơn về điều này trước khi chúng ta chuyển sang ngón tay cái [00. 12. 05] Dữ liệu vĩnh viễn này ở đây được gắn vào chức năng như thế nào? . Tôi không thể sử dụng chức năng mới trong toàn cầu, chức năng mới. balo. truy cập, điều này là không thể. Tôi thậm chí không thể đi chức năng mới. Tên chính thức của nó là bộ đếm dấu chấm khi họ bắt đầu sử dụng nó, hoàn toàn là họ gọi nó là riêng đối với bộ đếm gia tăng đó hiện được gọi là chức năng mới [00. 12. 38] Gọi hàm, chúng ta chỉ có thể vào bằng cách chạy hàm mới, không tìm thấy thứ chúng ta tham khảo trong bộ nhớ cục bộ và nhảy ra khỏi ba lô. Loại ba lô tự chèn trước khi chúng tôi tìm kiếm trên toàn cầu. Đừng hiểu lầm tôi, ba lô trong toàn cầu theo nghĩa là nó được gắn với một chức năng được lưu trong toàn cầu [00. 12. 58] Nhưng toàn cầu thực sự có nghĩa là tôi có thể truy cập tên của dữ liệu đó khi tôi ở trong ngữ cảnh thực thi toàn cầu, tôi không thể truy cập dữ liệu này, dữ liệu bị ẩn, dữ liệu được bảo vệ. Chà, nó được bảo vệ như thế nào? [00. 13. 20] Ngay sau khi bộ đếm số gia được lưu. Nó ngay lập tức có một liên kết đến ký ức xung quanh. Ngay lập tức, đến toàn bộ ký ức xung quanh. Liên kết đó được lưu trữ trên thuộc tính ngoặc vuông ngoặc vuông, hai ngoặc vuông. Khung vuông phạm vi được liên kết với bộ nhớ đang chạy này. Nó sẽ chỉ sao chép một liên kết đến nơi nó được lưu trữ theo đúng nghĩa đen [00. 13. 41] Khi tôi trả lại chức năng, tôi rút ra trên liên kết đó tất cả dữ liệu với tôi được đính kèm với chức năng. Vẫn có thuộc tính phạm vi đó, nó đây rồi. Làm thế nào mà nắp- [00. 14. 01] Tôi định bắt đầu lắc nó lần nữa thì tôi nghĩ, chà, đó là. Được rồi, như tôi đã nói, bất cứ khi nào chức năng mới chạy và nó không tìm thấy bộ nhớ cục bộ của bộ đếm, nó sẽ đi qua định nghĩa của nó để tìm thuộc tính phạm vi ẩn của nó, hay nói cách khác là vào ba lô và tìm bộ đếm. Bởi vì bộ đếm đã có khi nó được sinh ra và khi nó được trả lại, mã tăng bộ đếm từ chạy bên ngoài [00. 14. 23] Chúng tôi đã chạy bên ngoài, chúng tôi đã trả lại bộ đếm gia tăng đó từ khi nó đang tạo nó từ trong ra ngoài và chúng tôi đưa nó trở lại chức năng mới và chúng tôi chạy chức năng mới và nó không tìm thấy bộ đếm cục bộ và tìm đến ba lô chức năng mới được lưu trữ trên phạm vi . Tôi muốn làm ngón tay cái nhưng có lẽ tôi muốn nói với bạn một vài điều nữa về chiếc ba lô này trước [00. 14. 46] Đầu tiên, nó thực sự được tối ưu hóa, Java Script tạo liên kết về việc lưu bộ đếm gia tăng từ trong ra ngoài tới bộ nhớ cục bộ xung quanh, mọi thứ trong đó, liên kết tới toàn bộ bộ sưu tập, mọi thứ, có một liên kết tới nơi lưu trữ tất cả những thứ này [00. 15. 07] Thông thường khi bạn chạy xong một chức năng, điều duy nhất chúng ta giữ lại là gì, Sam? . Tất cả những thứ khác trong bộ nhớ cục bộ, chúng ta có giữ nó không? [00. 15. 20] Nó được gọi là rác vì chúng tôi không thể truy cập bất kỳ dữ liệu nào theo tên của nó nữa. Vì vậy, không có lý do gì nó ở đó. Chúng tôi tự động thu thập nó. Điều đó có nghĩa là nó sẽ tự động bị xóa bởi JavaScript [00. 15. 55] Điều gì sẽ xảy ra nếu tôi nói có thể là 10 điều khác nhau trong bộ nhớ cục bộ này. Tôi quay trở lại Tôi tăng bộ đếm vào chức năng mới chạy chức năng mới. Tôi có 10 thứ trong bộ nhớ cục bộ này ngoài bộ đếm. Điều duy nhất Alex, bên trong chức năng mới đối với tôi là bộ đếm tăng dần, điều duy nhất tôi đề cập đến Alex là gì? [00. 16. 17] [00. 16. 32] Có nghĩa là, tôi biết trên trở lại xin lỗi. Tốt hơn, JavaScript biết, khi trả lại incrementCounter cho newFunction, nó đã biết chức năng đó cuối cùng có thể cần hoặc truy cập vào cái gì. Và do đó, nó tối ưu hóa những gì được lấy ra trong ba lô sau khi chúng tôi thoát ra bên ngoài và xóa mọi thứ khác trong bộ nhớ cục bộ Làm cách nào để đặt một hàm bên trong một hàm JavaScript?Cách tiếp cận. Viết một hàm bên trong một hàm khác. Gọi hàm bên trong trong câu lệnh trả về của hàm bên ngoài. Gọi là fun(a)(b) trong đó a là tham số của hàm bên ngoài và b là hàm bên trong .
Một hàm có thể chứa một hàm khác trong JavaScript không?Hàm lồng nhau
. Có thể dễ dàng thực hiện điều này với JavaScript . |