Đoạn code javascript này giải thích như thế nào?

function getFunc() {
    var a = 7;
    return function(b) {
        alert(a+b);
    }
}
var f = getFunc();
f(5);

What’s alerted to the screen?

mình có nên mạng đọc giải thích mà vẫn k hiểu?

ai giải thích cho mình với:

sao lại gọi được f(5), cái return function kia là sao?

Mình thấy cái “dị” đầu tiên là function(b) (được trả về) vẫn sử dụng (đọc/ghi) được a :slight_smile:

3 Likes

Trong JavaScript tất cả các dữ liệu không phải Primitive type thì đều được tính là một Object, vậy nên function vẫn được tính là 1 Object và có thể được trả về. Trong ví dụ trên của bạn thì khi nạp argument vào getFunc thì nó sẽ tự hiểu là đó là argument cho cái funciton được trả về :smile:

1 Like

hihi, chắc do mới học nên nghe bạn nói mà vẫn chưa hiểu. thôi để học thêm vài bữa xem sao :smiley:

1 Like

cứ phân tích từ từ sẽ thông ngay :slight_smile: :

function getFunc() {
    var a = 7;
    return function(b) {
        alert(a+b);
    }
}

^ đoạn này sẽ trả về 1 function (tất nhiên là nó quá dễ dàng để đoán)

=========================

var f = getFunc();

^ đoạn này có thể hiểu là bê nguyên cái function ở return vào biến f
khi đó biến f sẽ là

var f = function(b) {
        alert(a+b);
    }

và gán a = 7 vào this của window

==========================
giờ chỉ việc gọi nó ra thôi : f(5) kết quả là 12 (this.a + b)

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?