2015-09-13 21 views
22

Tôi muốn để có thể gọi một hàm bên trong phạm vi .Sau đó, và cho rằng tôi sử dụng this.foo() cách. Nhưng nếu tôi làm điều này bên trong số . Sau đó Tôi gặp lỗi, vì này dường như bị mất. Tôi có thể làm gì?javascript, những lời hứa, làm thế nào để truy cập vào biến này bên trong một phạm vi sau đó

Trong mã này, đây sẽ là tương đương để có đầu ra tương tự cho các đối tượng này

console.log(this) 
one().then(function() { 
    console.log(this) 
}) 

function one() { 
    var deferred = $q.defer(); 
    deferred.resolve() 
    return deferred.promise; 
} 

này không có vẻ làm việc

console.log(this) 
var a = this; 
one().then(function(a) { 
    console.log(a) 
}) 
+2

Nếu bạn loại bỏ các 'a' luận từ 'một() sau đó (function (a) {' để nó 'một() sau đó (function() {.. ', sau đó sẽ cho bạn kết quả bạn muốn – Andy

+0

Có, tôi đã thử nghiệm nó ngay khi tôi đã nhìn thấy câu trả lời của bạn. Bạn hoàn toàn đúng! Tôi sẽ đánh dấu nó như một câu trả lời nếu bạn đăng nó như là một câu trả lời – Gerard

Trả lời

30

mã ví dụ thứ hai của bạn là đúng cách đi. Vì phạm vi thay đổi trong hàm mới, this cũng thay đổi nên bạn có quyền tham chiếu đến this bên ngoài hàm.

Lý do không thành công là do chức năng đang sử dụng a mà bạn đã chuyển vào hàm thay vì toàn cầu a bạn đã xác định bên ngoài nó.

Nói cách khác:

var a = this; 
one().then(function() { 
    console.log(a) 
}); 
+24

hoặc ... 'một(). sau đó (function() { console.log (điều này) } .bind (this))' _usual từ chối rằng Internet exploder trước 9 là một sự lãng phí không gian đĩa và không bao giờ nên dựa vào để làm bất cứ điều gì khác ngoài hiển thị các trang web tĩnh_ –

+2

Vâng, @JaromandaX, tôi đã j chúng tôi đang xem xét chỉnh sửa ai đó đã thực hiện cho câu trả lời và mã không nhìn đúng. Của bạn trông chính xác. – Andy

+2

của bạn là đúng, và có lẽ dễ sử dụng hơn trong nhiều trường hợp, bạn biết chỉ bằng cách tìm nơi bạn đặt 'var a = this' chính xác cái gì 'a/this' sẽ - trong khi, sử dụng bind, nó có thể không chính xác những gì bạn mong đợi hoặc muốn cho rằng vấn đề: p –

Các vấn đề liên quan