Tôi hiện đang theo dõi một khóa học javascript và đang gặp sự cố khi hiểu những gì đang xảy ra đằng sau hậu trường trong javascript trong một trong các ví dụ (xem mã bên dưới).Ví dụ về thời gian khó hiểu javascript Ví dụ
Tôi hiểu hầu hết mã và hiểu tại sao đầu ra được ghi lại là -> [sai, đúng, đúng]. Tuy nhiên có một phần được hạch lái xe tôi (tôi chỉ một mũi tên để nó trong mã ở phía dưới):
nhầm lẫn của tôi xoay quanh tham số 1
:
biết cuộc hành trình hiện mất thông số 1
kể từ thời điểm nó được thông qua với checkPastLimitSimplified(1)
trong var arr5 = mapForEach(arr1, checkPastLimitSimplified(1));
.
Tôi hiểu rằng khi checkPastLimitSimplified(1)
được gọi một ngữ cảnh thực thi được tạo cho hàm này trong đó tham số 1 nằm trong môi trường biến.
Nhưng bây giờ điều gì xảy ra? Hàm bên trong hàm checkPastLimitSimplified
chưa được thực thi nhưng chỉ được trả về. Nó trông như thế nào khi nó được trả lại? tại các biến số limiter
nhận tham số 1
là gì?
Tôi hiểu rằng .bind(this, limiter);
tạo bản sao của hàm. Là biến số limiter
của nó đã là 1 trước khi nó được trả về?
function mapForEach(arr, fn) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr.push(
fn(arr[i])
)
};
return newArr;
}
var arr1 = [1, 2, 3];
var checkPastLimitSimplified = function(limiter) { // < ----CONFUSED
return function(limiter, item) {
return item > limiter;
}.bind(this, limiter);
};
var arr5 = mapForEach(arr1, checkPastLimitSimplified(1));
console.log(arr5);
vì vậy nếu tôi hiểu điều này một cách chính xác, tham số 'outer_limiter' được chuyển vào hàm bằng cách gọi' checkPastLimitSimplified (1) 'là availble và được giải quyết trong .bind trước khi hàm được trả về? vì vậy về cơ bản 'chức năng (1, mục) { mục trả lại> giới hạn; } 'được trả về? vì vậy 'return' không dừng .bind() từ thực thi tại thời điểm này? – Yapartase
Chắc chắn, 'return' liên quan đến toàn bộ hàm' function() {}. Bind() '. –