Do cách JavaScript và hầu hết các ngôn ngữ, các biến phạm vi, bạn không thể truy cập các biến được khai báo bên trong một hàm từ bên ngoài một hàm. Biến chỉ thuộc phạm vi của hàm, không phải phạm vi toàn cầu.
May mắn thay, các chức năng kế thừa phạm vi của người gọi của họ. Vì vậy, cách dễ nhất để làm cho biến của bạn có thể truy cập từ bên ngoài chức năng là khai báo bên ngoài chức năng, sau đó sử dụng nó bên trong hàm.
function one[]{
var a;
function two[]{
a = 10;
return a;
}
return a;
}
Lưu ý rằng bạn nên rất cẩn thận về cách bạn phạm vi các biến của mình. Toàn bộ điểm của các chức năng là đóng gói và cô lập chức năng.
Trong trường hợp hứa hẹn, bạn có thể khai báo một biến bên ngoài lời hứa và sau đó đặt giá trị của nó thành công.
var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
Chỉnh sửa: Dựa trên những gì bạn đã thể hiện trong các bình luận, bạn đang gặp sự cố ASYNC. Lời hứa là không đồng bộ ý nghĩa họ không chạy theo trình tự trong mã của bạn. Đó là lý do tại sao các cuộc gọi lại success
và error
tồn tại, sẽ được gọi là một khi lời hứa giải quyết. alert[a]
của bạn nằm ngoài cuộc gọi lại hứa hẹn, vì vậy nó chạy ngay lập tức, mà không chờ đợi lời hứa phân tích giải quyết để
0 vẫn không được xác định. Nếu bạn đặt var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
alert[a]
bên trong cuộc gọi lại hứa hẹn,
0 sẽ được đặt theo điểm đó. Based on what you showed in the comments, you're having async issues. Promises are asynchronous meaning they don't run in sequence in your code. That's why the var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
success
and error
callbacks exist, to be called once the promise
resolves. Your alert[a]
is outside the promise callback, so it runs immediately, without waiting for the Parse promise to resolve so
var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
0 is still undefined. If you put the alert[a]
inside the promise callback, var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
0 will have been set by that point.var a;
query.count[{
success: function[count] {
a = count;
alert[a];
return a;
},
error: function[err] {}
}];
Để truy cập một biến bên ngoài một chức năng trong JavaScript, có thể truy cập biến của bạn từ bên ngoài chức năng. Đầu tiên, khai báo nó bên ngoài chức năng, sau đó sử dụng nó bên trong hàm. Bạn có thể truy cập các biến được khai báo bên trong một hàm từ bên ngoài một hàm. Biến chỉ thuộc về phạm vi chức năng, không phải là phạm vi toàn cầu.function one[]{
var a;
function two[]{
a = 10;
return a;
}
return two[];
}
Ví dụ đơn giản Truy cập biến Biến phạm vi chức năng bên ngoài.
function one[]{
var a;
function two[]{
a = 100;
console.log["Inner function"]
return a;
}
return two[];
}
var res = one[];
console.log[res]
Đầu ra::
Một cách khác là không đặt ra Var Var ,, Let Let hay hoặc Const Const sẽ làm cho biến đổi công khai và có thể sử dụng bên ngoài một chức năng.
function Play[]{
Video = 12 // Seconds
var Length = 15
}
console.log[Video] // Prints 12
console.log[Length] // "Lenght" is undefined
Thay đổi một biến bên ngoài hàm js
var global = "Global Variable"; //Define global variable outside of function
function setGlobal[]{
global = "Hello World!";
};
setGlobal[];
console.log[global]; //This will print out "Hello World"
Hãy bình luận nếu bạn có bất kỳ nghi ngờ hoặc đề xuất nào về chủ đề biến JS này.
Lưu ý: & nbsp; The & nbsp; tất cả các ví dụ JS & nbsp; is & nbsp; được kiểm tra trên trình duyệt firefox và trình duyệt Chrome. The All JS Examples codes are tested on the Firefox browser and the Chrome browser.
Hệ điều hành: & nbsp; windows 10Windows 10
Mã: Phiên bản HTML 5
Bằng cấp về Khoa học máy tính và Kỹ sư: Nhà phát triển ứng dụng và có nhiều ngôn ngữ lập trình kinh nghiệm. Sự nhiệt tình cho công nghệ và thích học kỹ thuật.
Khi bạn khai báo biến toàn cầu trong JavaScript, bạn có thể truy cập nó từ bên trong một chức năng như vậy:
Tuy nhiên, nếu bạn tạo một biến bên trong phạm vi của hàm có cùng tên với GlobalVarable, bạn sẽ mất quyền truy cập vào giá trị của GlobalVarable bên trong phạm vi của hàm.
Nếu bạn đọc mã ở trên theo thứ tự dòng được thực thi, thì đây là những gì bạn nghĩ sẽ xảy ra:
- Tạo GlobalVarable và gán nó một giá trị.
- Gọi một số chức năng.
- Giá trị nhật ký của
3 vào bảng điều khiển. Bạn mong đợi điều này sẽ đăng nhậpvar a; Parse.doSomething[].then[function[data] { a = data; }];
4var a; Parse.doSomething[].then[function[data] { a = data; }];
- Tạo một biến cục bộ mới với cùng tên với GlobalVarable.
3 và cho nó một giá trị.var a; Parse.doSomething[].then[function[data] { a = data; }];
- Đăng nhập biến cục bộ mới này. Bạn có thể mong đợi
6 sẽ được in.var a; Parse.doSomething[].then[function[data] { a = data; }];
Tuy nhiên, bạn thực sự gặp lỗi. JavaScript sẽ cho bạn biết rằng GlobalVarable không được xác định
7avascript will tell you that globalVariable is not defined
var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
7Explanation:
Điều này là do bất kể nơi bạn xác định biến của mình, nó sẽ kéo biến lên đầu phạm vi kèm theo của chúng. Có nghĩa là, nếu một biến được xác định trong một phạm vi, JavaScript di chuyển tất cả các cách ở đầu phạm vi. Đây là cùng một lý do bạn có thể gọi một hàm trong JavaScript trên dòng 1 mặc dù hàm không được xác định cho đến dòng 2.
Kết quả là ví dụ thứ hai, bạn mất quyền truy cập vào
var a;
Parse.doSomething[].then[function[data] {
a = data;
}];
3 được xác định bên ngoài phạm vi của hàm, bởi vì nó đã được nâng lên trên cùng của phạm vi [còn gọi là bên trong hàm].