Phạm vi vượt qua JavaScript để hoạt động
Thư viện chuẩn của Kotlin chứa một số hàm với mục đích duy nhất là thực thi một khối mã trong ngữ cảnh của một đối tượng. Khi bạn gọi một hàm như vậy trên một đối tượng có biểu thức lambda được cung cấp, nó sẽ tạo thành một phạm vi tạm thời. Trong phạm vi này, bạn có thể truy cập đối tượng mà không cần tên của nó. Các chức năng như vậy được gọi là chức năng phạm vi. Có năm người trong số họ. Show
Về cơ bản, các chức năng này làm giống nhau. thực thi một khối mã trên một đối tượng. Điều khác biệt là làm thế nào đối tượng này trở nên khả dụng bên trong khối và kết quả của toàn bộ biểu thức là gì Đây là cách sử dụng điển hình của hàm phạm vi lớp dữ liệu Person(var name. Chuỗi, var tuổi. thành phố int, var. Chuỗi) { fun moveTo(newCity. String) { city = newCity } fun incrementAge() { age++ } } fun main() { //sampleStart Person("Alice", 20, "Amsterdam"). hãy để { println(nó) nó. moveTo("London") nó. incrementAge() println(it) } //sampleEnd } Nếu bạn viết giống như vậy mà không có lớp dữ liệu Person(var name. Chuỗi, var tuổi. thành phố int, var. Chuỗi) { fun moveTo(newCity. String) { city = newCity } fun incrementAge() { age++ } } fun main() { //sampleStart val alice = Person("Alice", 20, "Amsterdam") println(alice) alice. moveTo("London") alice. incrementAge() println(alice) //sampleEnd } Các hàm phạm vi không giới thiệu bất kỳ khả năng kỹ thuật mới nào, nhưng chúng có thể làm cho mã của bạn ngắn gọn và dễ đọc hơn Do tính chất tương tự của các hàm phạm vi, việc chọn một hàm phù hợp cho trường hợp của bạn có thể hơi phức tạp. Sự lựa chọn chủ yếu phụ thuộc vào ý định của bạn và tính nhất quán của việc sử dụng trong dự án của bạn. Dưới đây chúng tôi sẽ cung cấp các mô tả chi tiết về sự khác biệt giữa các hàm phạm vi và các quy ước về cách sử dụng chúng lựa chọn chức năngĐể giúp bạn chọn chức năng phạm vi phù hợp với mục đích của mình, chúng tôi cung cấp bảng về sự khác biệt chính giữa chúng Chức năng tham chiếu đối tượng Giá trị trả về Là chức năng mở rộng
kết quả lambda Đúng
kết quả lambda Đúng
- kết quả lambda KHÔNG. được gọi mà không có đối tượng bối cảnh
kết quả lambda KHÔNG. lấy đối tượng ngữ cảnh làm đối số
đối tượng bối cảnh Đúng
đối tượng bối cảnh Đúng Thông tin chi tiết về sự khác biệt được cung cấp trong các phần dành riêng bên dưới Dưới đây là một hướng dẫn ngắn để chọn các chức năng phạm vi tùy thuộc vào mục đích dự kiến
Các trường hợp sử dụng của các chức năng khác nhau chồng lên nhau, do đó bạn có thể chọn các chức năng dựa trên các quy ước cụ thể được sử dụng trong dự án hoặc nhóm của bạn Mặc dù các hàm phạm vi là một cách làm cho mã ngắn gọn hơn, tránh lạm dụng chúng. nó có thể làm giảm khả năng đọc mã của bạn và dẫn đến lỗi. Tránh lồng các hàm phạm vi và cẩn thận khi xâu chuỗi chúng. rất dễ nhầm lẫn về đối tượng bối cảnh hiện tại và giá trị của sự khác biệtBởi vì các hàm phạm vi đều khá giống nhau về bản chất, điều quan trọng là phải hiểu sự khác biệt giữa chúng. Có hai sự khác biệt chính giữa mỗi chức năng phạm vi
đối tượng ngữ cảnh. cái này hoặc nóBên trong lambda của một hàm phạm vi, đối tượng bối cảnh có sẵn bằng một tham chiếu ngắn thay vì tên thực của nó. Mỗi chức năng phạm vi sử dụng một trong hai cách để truy cập đối tượng bối cảnh. dưới dạng lambda ( fun main() { val str = "Xin chào" // str này. run { println("Độ dài chuỗi. $length") //println("Độ dài chuỗi. ${cái này. length}") // làm tương tự } // nó str. let { println("Chuỗi có độ dài là ${it. chiều dài}") } } cái này
lớp dữ liệu Person(var name. Chuỗi, var tuổi. Int = 0, var thành phố. String = "") fun main() { //sampleStart val adam = Person("Adam"). áp dụng { tuổi = 20 // giống như thế này. tuổi = 20 thành phố = "London" } println(adam) //sampleEnd } NóĐổi lại, nhập kotlin. ngẫu nhiên. Niềm vui ngẫu nhiên writeToLog(tin nhắn. Chuỗi) { println("THÔNG TIN. $message") } fun main() { //sampleStart fun displaySubstringPosition(input. Chuỗi, phụ. Chuỗi) { chỉ số val = đầu vào. indexOf(sub) if (index >= 0) { println("Chuỗi con $sub được tìm thấy trong $input. ") println("Vị trí bắt đầu của nó là $index. ") } } displaySubstringPosition("010000011", "11") displaySubstringPosition("010000011", "12") //sampleEnd } Có chức năng vượt qua trong JavaScript không?1. Truyền hàm — không gọi chúng . Bạn có thể viết các hàm gọi lại hoàn toàn bên trong hàm cần chúng — nhưng để dễ đọc và gỡ lỗi, việc khai báo hoặc gán chúng ở nơi khác và tham chiếu chúng theo tên hàm hoặc tên biến thường giúp ích cho bạn.
Làm cách nào tôi có thể chuyển kết quả từ hàm này sang hàm khác trong JavaScript?Khi có nhiều chức năng (hầu hết thời gian), cần có một cách để truyền dữ liệu giữa các chức năng. Điều này được thực hiện bằng cách chuyển các giá trị trong ngoặc đơn. myFunction(myData) . Ngay cả khi không có dữ liệu nào được truyền vào, chúng ta vẫn phải khai báo và thực thi các hàm bằng cách sử dụng dấu ngoặc đơn. myFunction().
Làm cách nào để truy cập biến phạm vi trong JavaScript?Trong JavaScript, phạm vi được tạo bởi các khối mã, hàm, mô-đun. Trong khi các biến const và let được xác định phạm vi bởi các khối mã, hàm hoặc mô-đun, thì các biến var chỉ được xác định phạm vi bởi các hàm hoặc mô-đun. Phạm vi có thể được lồng nhau. Bên trong phạm vi bên trong, bạn có thể truy cập các biến của phạm vi bên ngoài .
Làm cách nào để truy cập một biến bên ngoài một hàm trong JavaScript?Để truy cập vào một biến nằm ngoài phạm vi hiện tại mà bạn muốn, thì bạn phải khai báo nó bên ngoài phạm vi này hoặc chuyển nó dưới dạng tham số trong hàm của bạn. so here's a scope : // declare it outside the event handler function's scope : let TRADE_OUT = null; client. |