2013-07-31 43 views
12

Một câu hỏi Javascript đơn giản, Ví dụ tôi có một app.js góc như thế này;Biến toàn cầu ở chế độ nghiêm ngặt JavaScript

'use strict'; 

var eventsApp = angular.module('eventsApp',[]); 

tôi đọc rằng việc sử dụng "sử dụng nghiêm ngặt" trong đầu của một tập tin javascript làm cho tất cả vars trong tập tin đó phải được điều trị trong chế độ nghiêm ngặt, có nghĩa là nó sẽ ném ra một lỗi khi bạn sử dụng một biến toàn cục (?) , nhưng sau đó làm thế nào chúng ta có thể truy cập đối tượng "eventApp" đó từ tất cả các bộ điều khiển và dịch vụ của chúng ta nếu nó không nằm trong phạm vi toàn cục?

Trả lời

13

Giả định bị lỗi là ở chế độ nghiêm ngặt tất cả các biến toàn cầu đều không được phép. Trên thực tế chỉ có undefined các biến toàn cầu ném một lỗi. (Trong thực tế về cơ bản bạn không thể làm bất cứ điều gì ở tất cả nếu bạn không thể sử dụng bất kỳ biến toàn cục Cần phải có ít nhất là một cái gì đó trong phạm vi toàn cầu..)

Ví dụ:

"use strict"; 

var a = "foo"; 
var b; 

(function() { 
    a = "bar"; // this is ok, initialized earlier 
    b = "baz"; // this is also ok, defined earlier 
    c = "qux"; // this is not, creating an implicit global 
})(); 

Sử dụng các biến a hoặc b không phải là vấn đề, nhưng c sẽ phát sinh lỗi. Sẽ không có vấn đề gì khi sử dụng biến số eventApp trong ví dụ của bạn.

+0

Tnx, nếu var a không được khởi tạo bằng "foo" thì đó cũng là lỗi phải không? – Spring

+0

Miễn là nó được định nghĩa thì nó là ok, vì vậy 'var a;' là đủ. – JJJ

+0

Tôi có nghĩa là chỉ sử dụng var a; và không initilazing nữa ở bất cứ đâu trong tập tin đó – Spring

4

Bạn không cần phải tham chiếu eventsApp vì góc sẽ giữ tham chiếu đến đối tượng theo tên 'eventsApp' mà bạn đang sử dụng để xác định mô-đun.

Vì vậy, trong tất cả các file khác mà bạn chỉ có thể sử dụng:

angular.module('eventsApp'); 

Để có được quyền truy cập vào các mô-đun.

+0

srry thi si abit khó hiểu, vì vậy bạn có nghĩa là eventsApp không phải là toàn cầu? – Spring

+0

Điều tôi đang nói là bạn không cần tham chiếu 'sự kiệnApp' trong các tệp khác. Trong thực tế, bạn thậm chí không cần phải thiết lập biến đó. Angular là hạnh phúc nếu bạn định nghĩa một mô-đun như thế này: 'angular.module ('eventsApp', []);' và sau đó đăng ký một dịch vụ với một mô-đun (trong một tệp khác) như sau: 'angular.module ('eventsApp') .factory ('dịch vụ'); ' –

+0

Tôi thấy quan điểm của bạn, nhưng câu hỏi của tôi ngoài góc cạnh, var eventsApp là toàn cầu hay không? và tôi hiểu nó là toàn cầu/cửa sổ – Spring

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