- chí này tự gọi
a
được đưa ra function
b
như là đối số (kể từ a
được định nghĩa là một biến bên trong phạm vi địa phương a
's rằng sẽ mất sự hiện diện trên chức nănga
được khai báo trong cha mẹ phạm vi.).
- Sau đó, nó sẽ tự gọi
b
được đưa ra c
làm đối số.
- Cuối cùng, chức năng
c
là tự viện dẫn trả về true
như được đưa ra làm đối số.
Bạn có thể nhìn vào nó như là một chuỗi làm điều này:
a(var a) // function b given as arg. When a returns b() will be invoked
b(var b) // function c given as arg. When b returns c() will be invoked
c(true)
a
khi bên trong hàm (phạm vi địa phương) là một biến vì function foo(bar){}
cũng giống như function(){var bar = arguments[0]}
.
Chức năng a
có thể được viết như thế này và làm điều tương tự:
function a(foo){
return foo;
}
Bạn có thể xác minh bằng cách làm này:
console.log('start');
(function a(a){
console.log('a', typeof a);
return a;
})
(function b(b){
console.log('b', typeof b);
return b;
})
(function c(c){
console.log('c', typeof c);
return c;
})
(true);
console.log('end');
ONLINE FIDDLE HERE
đầu ra
Console (cập nhật để hiển thị trong FF cũng như
sử dụng Chrome để xem định nghĩa hàm o utput
):
> start
> a function
> b function
> c boolean
> end
Chỉ ba chức năng của nó và trả về đúng sự thật .. Thats it –
Tôi không. Bạn tôi đã cho tôi như một câu đố. – Joon
Phần khó khăn của "câu đố" này không phải là các hàm được gọi tự động, nhưng tại sao chúng được gọi từ trái sang phải. Nếu bạn thêm câu lệnh 'console.log' trước mỗi lần trả về, bạn sẽ thấy rằng' a' được xuất ra trước 'b', được xuất ra trước' c'. Nhưng làm thế nào có thể chức năng 'a' biết đầu vào arg trước khi chức năng' b' trả về nó? – Steve