2015-04-18 18 views
6

Sau đây là hàm javascript của tôi, tôi muốn sử dụng biến số chọn chức năng bên ngoài, nhưng tôi nhận được đã chọn không được xác định lỗi trong bảng điều khiển của phần tử kiểm tra. window.yourGlobalVariable không giải quyết được sự cố của tôi.Làm thế nào để tạo một biến nằm bên trong một hàm toàn cục?

function showMe(pause_btn) { 
    var selected = []; 
    for (var i = 0; i < chboxs.length; i++) { 
     if (chboxs[i].checked) { 
      selected.push(chboxs[i].value); 
     } 
    } 
} 
+0

"các biến toàn cục của stackoverflow javascript" -> http://stackoverflow.com/questions/4862193/javascript-global-variables – royhowie

+0

bản sao có thể có của [Xác định biến toàn cục trong hàm JavaScript] (http://stackoverflow.com/ question/5786851/define-global-variable-in-a-javascript-function) – royhowie

+0

@rowhowie Tôi đã chỉnh sửa cửa sổ câu hỏi của mình.yourGlobalVariable không giải quyết được sự cố của tôi. –

Trả lời

13

Nếu bạn thực sự muốn nó được toàn cầu, bạn có hai lựa chọn:

  1. Khai nó trên toàn cầu và sau đó rời khỏi var tắt trong hàm:

    var selected; 
    function showMe(pause_btn) { 
        selected = []; 
        for (var i = 0; i < chboxs.length; i++) { 
         if (chboxs[i].checked) { 
          selected.push(chboxs[i].value); 
         } 
        } 
    } 
    
  2. Gán đến một tài sản window

    function showMe(pause_btn) { 
        window.selected = []; 
        for (var i = 0; i < chboxs.length; i++) { 
         if (chboxs[i].checked) { 
          selected.push(chboxs[i].value); // Don't need `window.` here, could use it for clarity though 
         } 
        } 
    } 
    

    Một thuộc tính của window là các biến toàn cục (bạn có thể truy cập chúng có hoặc không có window. trước mặt chúng).

Nhưng, tôi sẽ tránh làm cho nó toàn cầu. Hoặc có showMetrở thông tin:

function showMe(pause_btn) { 
    var selected = []; 
    for (var i = 0; i < chboxs.length; i++) { 
     if (chboxs[i].checked) { 
      selected.push(chboxs[i].value); 
     } 
    } 
    return selected; 
} 

... và sau đó khi bạn cần nó:

var selected = showMe(); 

... hoặc khai báo nó trong phạm vi chứa showMe, nhưng không toàn cầu . Không có ngữ cảnh, trông giống như # 1 ở trên; đây là một chút bối cảnh:

(function() { 
    var selected; 
    function showMe(pause_btn) { 
     selected = []; 
     for (var i = 0; i < chboxs.length; i++) { 
      if (chboxs[i].checked) { 
       selected.push(chboxs[i].value); 
      } 
     } 
     return selected; 
    } 

    // ...other stuff that needs `selected` goes here... 
})(); 

Các chức năng ẩn danh bên ngoài là một "chức năng Phạm vi" có nghĩa là selected không phải là toàn cầu, nó chỉ chung cho bất cứ điều gì trong chức năng đó.

+2

Cảm ơn bạn đã duy trì một số mức độ về chất lượng câu trả lời. –

+0

Tôi đánh giá cao nỗ lực của bạn, nhưng sau đó tôi đã chỉnh sửa câu hỏi của mình và @navin đã giải quyết được câu hỏi của tôi. Nhưng tôi vẫn upvotes bạn. –

0

Bạn có thể định nghĩa mảng gọi selected trong phạm vi mà các chức năng gọi showMe được định nghĩa.

Về mã:

var selected = []; 

function showMe(pause_btn) { 
    for (var i = 0; i < chboxs.length; i++) { 
     if (chboxs[i].checked) { 
      selected.push(chboxs[i].value); 
     } 
    } 
} 
1

Làm điều này:

var selected; 

function showMe(pause_btn) { 
    selected = []; 
    for (var i = 0; i < chboxs.length; i++) { 
     if (chboxs[i].checked) { 
      selected.push(chboxs[i].value); 
     } 
    } 
} 

Bạn thực sự có thể bỏ qua dòng var selected; nhưng tôi thích tuyên bố biến tôi.

0
var selected = []; 
function showMe(pause_btn) { 

    for (var i = 0; i < chboxs.length; i++) { 
     if (chboxs[i].checked) { 
      selected.push(chboxs[i].value); 
     } 
    } 
} 
0

Nếu bạn khai báo selected làm thuộc tính trên đối tượng cửa sổ, bạn sẽ có thể truy cập từ bất kỳ nơi nào khác.

function showMe(pause_btn) { 
    window.selected = []; 
    for (var i = 0; i < chboxs.length; i++) { 
    if (chboxs[i].checked) { 
     selected.push(chboxs[i].value); 
    } 
    } 
} 
1

Không sử dụng điều này;

selected = []; 

nó là một lỗi javascript

window.selected = []; 

bên trong hàm của bạn.

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