2016-10-12 19 views
6

Tôi đang học các biến toàn cục và biến cục bộ của JS, nhưng tôi bị nhầm lẫn về hàm cụ thể này.Biến cục bộ và toàn cầu bên trong hàm Javascript

var text = "top"; 
function print() { 
    return (text); 
} 
print(); 
//returns 'top' 

Tôi hiểu tại sao nó trả về hàng đầu. var text là biến toàn cục. Chức năng print() có quyền truy cập vào nó và trả về text, do đó trả về 'top'.

var text = "top"; 
function print() { 
    return (text); 
    var text = "bottom"; 
} 
print(); 
// returns undefined 

Tôi có kiến ​​thức cơ bản về biến toàn cầu và cục bộ (hoặc vì vậy tôi nghĩ). Tôi biết rằng hàm print có quyền truy cập vào các biến cục bộ cộng với toàn cục của nó.

Tôi không hiểu tại sao điều này trả về undefined. Theo hiểu biết của tôi, dòng return text; truy lục biến toàn cầu text mà nó có quyền truy cập (như được hiển thị trên khối mã đầu tiên). Sau khi trở về text = 'top', nó cũng khai báo biến địa phương của riêng nó có cùng tên nhưng giá trị khác nhau, 'bottom'. Biến cục bộ bottom, theo hiểu biết của tôi, nên ngồi ở đó vì nó không được gọi trước đó.

Tại sao nó không hiển thị top (hoặc thậm chí hiển thị bottom) nhưng thay vào đó hiển thị undefined?

+0

số Trong trường hợp thứ hai, nó sẽ trả về các văn bản biến cục bộ , được * khai báo * bên trong hàm. (Đó là những gì làm cho nó địa phương.) Nhưng tại thời điểm sự trở lại được thực thi, biến chưa được gán một giá trị nào. –

+4

Tra cứu "cẩu nâng" trong JavaScript. –

Trả lời

6

Javascript Tời khai báo biến của bạn như vậy mà mã của bạn có chức năng như sau:

var text = "top"; 
function print() { 
    var text; 
    return (text); 
    // unreachable code below 
    text = "bottom"; 
} 
print(); 
// returns undefined 

Kể từ text như khai báo trong hàm của bạn chưa được định nghĩa khi bạn nhấn return(text), và text="bottom" là unreachable, print() lợi nhuận undefined

Xem What is the scope of variables in Javascript để biết thêm. Câu hỏi này liên quan đến trường hợp 7.

-1

phân công của bạn:

var text = "bottom"; 

đưa ra sau khi một chức năng trở lại vì vậy nó được không thích hợp, đó là tuyên bố unreachable

var text = "top"; 
 
function print() { 
 
    return (text); 
 
    //var text = "bottom"; 
 
    //the above assignment comes after a return function 
 
    //so it is not proper, it is unreachable statemen 
 
} 
 
alert(print()); 
 
// returns undefined

+0

Để gán lại giá trị "dưới cùng" cho văn bản, nó phải đến trước câu lệnh trả về để có thể truy cập được. – Po10cio

2

này là để làm với variable hoisting

Mã trong ví dụ thứ hai của bạn được thực hiện theo thứ tự này:

  1. Khai báo biến toàn cục text
  2. Set giá trị của biến toàn cầu text để "top"
  3. Declare Function print
  4. Gọi chức năng print
  5. Khai báo biến cục bộ text (do cẩu)
  6. Giá trị trả về của biến cục bộ text (undefined vào thời điểm này)
  7. Set giá trị của biến cục bộ text tới "đáy"

Nó được thực hiện như thể nó được viết như thế này:

var text = "top"; 
function print() { 
    var text; 
    return (text); 
    text = "bottom"; 
} 
print(); 

Như bạn có thể thấy, giá trị của text được trả về trước khi thực sự được xác định, và do đó nó là undefined.

0

Đó là do lưu trữ.

cẩu dạy rằng biến và chức năng khai báo có thể chất chuyển đến hàng đầu của bạn mã hóa

Bạn có thể lấy mẫu và giải thích here

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