EDITđối tượng JavaScript trở về từ chức năng có sẵn trong Chrome Dev Tools, nhưng không phải từ kịch bản
tôi là một chút nhanh chóng đó, các vấn đề phát sinh trong chức năng và không phải là nơi đầu tiên tôi nói. Đây là hàm:
function returnAnObject(url) {
var apiurl = 'http://url.com';
var info = {};
$.getJSON(apiurl, function(data) {
$.extend(info, {
a : data.x,
b : data.y,
c : data.z
});
});
console.log(info); // Shows object as usual
console.log(info.a); // Shows undefined
return info;
}
Điều đó có làm cho nó rõ ràng hơn không?
END EDIT
Ok như vậy, tôi có một vấn đề nhỏ.
Tôi có một hàm trả về một đối tượng khá đơn giản, mà trông giống như sau:
{
a: 'x',
b: 'y',
c: 'z'
}
tôi lưu nó vào một biến như thế này:
var something = functionThatReturnsObject(someargument);
console.log(something); // In chrome dev tools, I see the object and its values
console.log(something.a); // This, however, logs undefined
console.log(something['a']); // This also logs undefined
Tại sao điều này? Tôi nghĩ rằng tôi sẽ điên đây, tôi phải bỏ qua một cái gì đó ...
Phần thực sự kỳ lạ xảy ra nếu thay vì
var something = functionThatReturnsObject(someargument);
tôi viết
window.something = functionThatReturnsObject(someargument);
console.log(something); // Still works, showing the object and properties
console.log(something.a); // Still doesn't work
console.log(someting['a']); // Still doesn't work
Nếu bây giờ tôi truy cập đối tượng trực tiếp từ các công cụ dev, nhập
something; // returns object, I can see everything in it etc.
something.a // Now, for some mysterious (to me) reason, this works, returning the value of a
Vì vậy, có ai hiểu điều gì đang xảy ra với cô ấy không e?
Có thể bạn sẽ phải hiển thị cho chúng tôi hàm trả về giá trị và định nghĩa thực của các biến cho chúng tôi để xem có gì sai. Nó có thể là một vấn đề phạm vi mà chúng tôi chỉ có thể nhìn thấy từ mã thực của bạn. Các công cụ dev có thể có một phạm vi khác đôi chút so với mã thực thi của bạn. – jfriend00
@ jfriend00 thực sự bạn là đúng, vấn đề phát sinh trong chức năng và không phải nơi tôi đã nói đầu tiên. Tôi sẽ chỉnh sửa câu hỏi. – martingms
@ jfriend00 Chức năng đã thêm – martingms