2015-06-20 42 views
8

tôi đang gặp khó khăn tìm hiểu chút mã này:nguyên cảo/JavaScript foreach gọi

stringsArray.forEach(s => { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + 
      (validators[name].isAcceptable(s) ? 
       ' matches ' : ' doesnt match ') + name); 
    } 
}); 

nói riêng, phần s => { ... là bí ẩn. Có vẻ như s đang được gán cho chuỗi tiếp theo trong mảng trên mỗi vòng lặp. Nhưng ý nghĩa của phần => là gì? Nó liên quan đến lambdas tôi nghĩ, nhưng tôi không đi theo.

Trả lời

12

Vâng đó là một lambda (ví dụ, tương tự như ECMAScript6 và Ruby, cũng như một số ngôn ngữ khác.)

Array.prototype.forEach mất ba đối số, element, index, array, vì vậy s chỉ là tên tham số được sử dụng cho element.

Nó muốn được như viết thư này trong ECMAScript5 thường xuyên:

stringsArray.forEach(function(s) { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + 
      (validators[name].isAcceptable(s) ? 
       ' matches ' : ' doesnt match ') + name); 
    } 
}); 

Trong ví dụ trên, bạn đã không hiển thị toàn bộ mã, vì vậy tôi giả validators chỉ là một đối tượng đồng bằng {}.

Cú pháp cho ví dụ bạn đã cung cấp thực sự giống với cú pháp ES6.

Kiểm tra ví dụ này từ the TypeScript handbook:

example

+0

Thanks ... Vẫn còn một chút nhầm lẫn ... Lưu ý rằng tôi khá thành thạo trong Ruby nhưng không phải trong JS. Tôi đang học TS thay vì nó có vẻ như một nền tảng vững chắc hơn cho tôi ... là "s => {}" đi qua một lambda như là đối số đầu tiên cho for_each? Nếu vậy, làm thế nào có thể xuất hiện một lần nữa trong cơ thể của lambda chính nó? Đó là nơi tôi đang bối rối (bây giờ.) Cảm ơn! – pitosalas

+1

@pitosalas, TypeScript đang đóng băng trên đầu trang của JavaScript. Tôi nghĩ rằng có thể là một ý tưởng tồi khi học TypeScript trước, và không phải là cách khác. Bạn đã đọc tài liệu cho '.forEach' chưa? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach –

+1

Tôi cũng biết một chút js (và tôi đọc song song js song song) vì vậy khác hơn một số trickiness ở đây Tôi cảm thấy khá thoải mái. Nhưng tôi sẽ theo liên kết bạn chỉ đến và nghiên cứu điều đó. Cảm ơn. – pitosalas