Làm thế nào để viết điều này trong coffeescript?
f = (function(){
// something
})();
Cảm ơn vì bất kỳ mẹo nào :)
Làm thế nào để viết điều này trong coffeescript?
f = (function(){
// something
})();
Cảm ơn vì bất kỳ mẹo nào :)
Câu trả lời:
Mặc dù bạn chỉ có thể sử dụng dấu ngoặc đơn (ví dụ: (-> foo)()
bạn có thể tránh chúng bằng cách sử dụng do
từ khóa:
do f = -> console.log 'this runs right away'
Việc sử dụng phổ biến nhất do
là bắt các biến trong một vòng lặp. Ví dụ,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Nếu không có do
, bạn chỉ in giá trị của x
sau vòng lặp 3 lần.
-> console.log 'this runs right away'
tới f
, sau đó chạy nó; của bạn chạy hàm và sau đó gán kết quả của nó cho f
, như trong câu hỏi ban đầu. (Mặc dù trong trường hợp console.log
, giá trị trả về luôn là undefined
anyway.)
{f: do -> // something}
do
cũng cho phép bạn chuyển các đối số cho hàm. Để chuyển 1
và 2
dưới dạng các tham số x
và y
, viết do (x = 1, y = 2) ->
. (Tài liệu về tính năng này đã bị mất , nhưng vấn đề nơi tính năng được giới thiệu có một số ví dụ.)
Nếu bạn muốn "bí danh" các đối số được truyền cho hàm tự gọi trong CoffeeScript và giả sử đây là những gì bạn đang cố gắng đạt được:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Sau đó do (window, document) ->
sẽ không cho phép bạn làm điều đó. Cách để đi là với parens sau đó:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Bạn cũng có thể kết hợp do
từ khóa với các tham số hàm mặc định để gieo "các hàm tự khởi tạo" đệ quy với giá trị ban đầu. Thí dụ:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
thử sử dụng
do ($ = jQuery) ->
do ->
#your stuff here
Điều này sẽ tạo ra một bao đóng tự thực thi, rất hữu ích cho việc xác định phạm vi.
Xin lỗi, tôi đã giải quyết nó:
f = (
() -> "something"
)()
do
từ khóa có một số hạn chế mà làm cho nó cần thiết để sử dụng phương pháp JS-phong cách đôi khi (xem vấn đề 960 ); do
thực sự chỉ được thêm vào vì trường hợp sử dụng loop-with-close.
Nó nên được
f = () ->
# do something
f = do -> console.log x