2012-06-26 27 views
7

Tôi có thể hơi dày đặc ở đây nhưng hãy trả lời tôi điều này. Xét đoạn mã sau:Bối rối trong khi vòng lặp trong javascript

a=1; 
while(a<=6) { 
    console.log(a); 
    a++; 
} 

Nếu tôi chạy này tôi nhận được giá trị trong giao diện điều khiển 1-6, và sau đó khác 6.

Bây giờ xem xét điều này:

a=1; 
while(a<=6) { 
    console.log(a); 
    ++a; 
} 

Chạy này giờ đây sẽ cho tôi các giá trị từ 1 đến 7.

Tại sao điều này lại xảy ra? Sự hiểu biết của tôi là khối lệnh sẽ chỉ chạy nếu biểu thức được đánh giá là đúng. Làm thế nào điều này có thể được thực hiện trong ví dụ thứ hai của tôi? Và tại sao 6 xuất hiện hai lần trong lần đầu tiên? Rất khó hiểu đối với tôi.

Nếu bạn có thể giải thích đơn giản (tôi vẫn đang học) sẽ rất tuyệt.

+0

u có thể hiển thị mã đầy đủ vì ++ a; và ++; giống nhau nếu chúng là tuyên bố cá nhân và không được kết hợp với câu lệnh khác. –

+0

Đây là mã đầy đủ - Tôi đang sử dụng một ví dụ từ một cuốn sách và cố gắng hiểu những gì đang diễn ra. Tôi đang thử nghiệm nó bằng cách sử dụng các cửa sổ giao diện điều khiển của cả firefox và chrome. Kết quả cũng giống nhau. –

+2

Ví dụ thứ hai in từ 1 đến 6 -> http://jsfiddle.net/USYSH/ – ManseUK

Trả lời

13

Bàn điều khiển in cho bạn giá trị của câu lệnh cuối cùng được đánh giá. Trong trường hợp thứ hai, bạn tăng trước, vì vậy giá trị của số đó là 7 và không phải 6 như trong giá trị đầu tiên.

Thay đổi bạn console.log() gọi để in nhiều công cụ và nó sẽ được rõ ràng:

console.log("a is: " + a); 

Bạn sẽ không thấy rằng tiền tố trên dòng cuối cùng.

+1

Điều đó không có ý nghĩa với tôi chút nào. Nếu giá trị là 7, tại sao nó vượt qua tình trạng ban đầu (tức là <= 6) ... với tâm trí của tôi rằng điều đó không nên xảy ra. –

+2

Nó không vượt qua tình trạng ban đầu. Nó chỉ xảy ra rằng câu lệnh cuối cùng được thực thi là '++ a;' do đó bàn điều khiển được in ra "miễn phí". – Pointy

+1

@Romil xin lỗi, nhưng tuyên bố đó là không chính xác. Chúng không giống nhau trong ngữ cảnh của bảng điều khiển JavaScript của trình duyệt, luôn luôn in ra giá trị kết quả của câu lệnh. Hãy tự mình thử ngay từ trình duyệt của bạn. – Pointy

2

Trong cả hai trường hợp, bạn sẽ thấy một chữ số bổ sung vì bàn điều khiển sẽ xuất kết quả của câu lệnh cuối cùng trong vòng lặp.

Khi mã đó không được thực thi trực tiếp trong bảng điều khiển, bạn sẽ không thấy nội dung xuất hiện là số phụ.

+0

' while' statement không có "kết quả". –

+0

đúng, nhưng trong ngữ cảnh của bảng điều khiển, nó sẽ xuất báo cáo cuối cùng – tybro0103

0

Xem fiddle với phản hồi của họ. Cả hai trả lại 1 đến 6.

a ++: Trả về giá trị a trước khi tăng.

++ a: Trả về giá trị a sau khi tăng.

Loops thực hiện cho đến khi giá trị của 'a' < = 6.

Khi bạn chạy bất kỳ mã trên giao diện điều khiển, nó evalutes giá trị biến và in giá trị của nó cũng là lý do tại sao bạn đang nhận được thêm một 67 trong đầu ra.

Đừng lo, khi bạn chạy mã này, sẽ chỉ nhận được giá trị 1-6.

+0

Có lẽ nên đọc qua các nhận xét. OP hỏi về đầu ra được quan sát trong 'console', thường bao gồm' 7' cho ví dụ mã thứ hai. –

+1

Vui lòng kiểm tra http://jsfiddle.net/eqA8t/. Tôi cũng kiểm tra trong giao diện điều khiển .. Nó trả về 6 chỉ. :) :) –

+0

Những gì jsfiddle cho thấy không quan trọng vì đó không phải là những gì OP đang hỏi về. Nếu bạn nhập mã trực tiếp vào bảng điều khiển, nó sẽ thường bao gồm '7'. * (Tôi nói "thường" bởi vì có thể có một số giao diện điều khiển ra khỏi đó mà không làm điều này.) * Câu hỏi không hoàn toàn rõ ràng về điều đó, nhưng các ý kiến ​​xóa nó lên. –

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