2011-09-28 4 views
8

SCRPT5039: Redeclaration of const property line 1 character 1Lỗi JS 'redeclaration' của var khi nó là dòng đầu tiên trong chương trình?

line1: var editObj = null;

Đây là sự khởi đầu của tập tin và tôi đã kiểm tra để đảm bảo rằng biến không có trong bất kỳ tập tin js khác được gọi. Có phải nó nói rằng tôi redeclare nó sau này? (nếu như vậy tham chiếu dòng là không hữu ích) hoặc những gì là sai với điều này?

+0

Trình duyệt nào hoặc công cụ Javascript khác? Bạn thấy lỗi này ở đâu? SCRPT5039 là gì? –

+0

điều này nói rằng bạn đã tuyên bố trước đó, hãy kiểm tra lại .. – amosrivera

+0

Chỉ vì đó là dòng đầu tiên trong tập lệnh _that_ không quan trọng nếu có các tập lệnh khác được tải trước đó. –

Trả lời

3

EDIT: Đã sửa lỗi. Đối với tôi, dù sao đi nữa. Tôi gặp lỗi này trước khi lỗi redeclaration:

HTML1113: Document mode restart from Quirks to IE9 Standards 

Điều này cho thấy IE phát hiện ra lỗi là gì, vì vậy tải lại trang ở chế độ Quirks. Tải trang hai lần khiến cho mọi thứ được khai báo hai lần. Vì vậy, giải pháp là để tìm những gì IE không thích.

Trước tiên, tôi chạy trang qua online HTML validator. Tiếp theo, tôi chạy javascript của mình qua jsLint. Sau tất cả, IE9 có vẻ hạnh phúc. Và như một phần thưởng tôi có mã chất lượng tốt hơn. Tôi hi vọng.

5

Tôi đã nhận lỗi này với đoạn mã sau:

var window; 

tôi đã thêm vào lời tuyên bố này để workaround một lỗi nút khi sử dụng đoạn mã sau:

if (!window) { 
    //node-specific stuff 
} 

Nếu không có khai báo trên, nút wold than phiền. Cuối cùng, tôi đã chọn sao chép/dán thay vì cố gắng chia sẻ cùng một tệp chính xác giữa việc triển khai nút và trình duyệt.

+0

Vì một số lý do, tức là không hỗ trợ điều này. Rất lạ – jontro

+0

Bạn có thể đã tìm ra, nhưng tôi quan sát loại lỗi này được ném khi chúng tôi sử dụng các từ khóa dành riêng làm tên biến của chúng tôi. – Emma

1

Tôi đã gặp vấn đề tương tự trong mã của mình và hóa ra là dòng hiển thị của IE sai dòng đã được hiển thị lại. Trong trường hợp của tôi đó là lịch sử tôi sử dụng sau này trong mã. Bạn nên kiểm tra toàn bộ mã để xác định lại các hằng số. Bạn có thể thử nhận xét một phần mã và xem khi nào nó phát ra lỗi đó.

3

Tôi gặp sự cố tương tự với cùng lỗi, nhưng dòng mã đầu tiên của tôi là alert(0); mà tôi đã chèn để đảm bảo tập lệnh đã được tải! Điều thú vị là, tập lệnh được tải theo công cụ dành cho nhà phát triển của IE9, nhưng dòng đầu tiên chưa bao giờ được thực hiện và lỗi được chỉ ra là alert(0); làm bản sao kê này. Tôi thậm chí còn chèn các dòng và dấu cách trước nó và số dòng và ký tự thay đổi tương ứng. Tuy nhiên, điều này (rõ ràng) không phải là điều được redeclared bởi vì nó thậm chí không phải là một tuyên bố, hãy để một mình một redeclaration!

Tôi đã xóa khối từ ngày kết thúc của kịch bản cho đến khi nó thực hiện các alert(0); (chỉ ra rằng kịch bản đã được nạp và được phân tách thành công), và tôi phát hiện ra rằng dòng vi phạm là:

var screen; 

Hóa ra IE9 đã có số window.screen mà tuyên bố này đã va chạm và đổi tên số screen thành eScreen của mình đã khắc phục được sự cố.

Vì vậy, câu trả lời của tôi là: không tin tưởng chỉ thị của IE9 về vị trí đặt lại!

(Cũng đáng lưu ý rằng tập lệnh chạy tốt ở dạng ban đầu của nó trên IE7, IE8 và IE10, không chỉ trên IE9.)

+0

Nó cũng sẽ hoạt động trên IE9 ở chế độ tương thích – JoshBerke

+0

Thật vậy, và tôi nhận thấy rằng lỗi của IE9 bây giờ là "Xác nhận lại thuộc tính const", điều này hữu ích hơn nhiều. –

0

Tôi đã gặp lỗi tương tự và gặp phải bài đăng này. Trong khi tôi không có cùng một vấn đề gốc như OP tôi nghĩ rằng tôi sẽ chia sẻ giải pháp của tôi trong trường hợp những người khác làm cho cùng một sai lầm của tôi và đến đây. Tôi đã nhận được lỗi trong một tệp js riêng biệt. Sau khi đơn giản hóa, tôi thấy rằng tôi có thể tạo lỗi từ mã sau:

var foo = null; 
var bar = null; 
var localData = null; 

Lỗi nói là từ dòng đầu tiên. Tuy nhiên, foo đã không được redeclared. Vấn đề là localData phải được sử dụng ở nơi khác (không phải trong mã của tôi). Không có vấn đề làm thế nào đến nay trong tập tin localData đã được tuyên bố, lỗi được liệt kê như là trên dòng thực sự đầu tiên của mã.

Vì vậy, nếu các giải pháp khác không hoạt động, hãy thử đổi tên từng biến trong tệp mã để xác định biến nào có thể gây ra sự cố. Đừng tin tưởng rằng trình gỡ lỗi đang trỏ tới dòng bên phải.

Đã gặp phải: ứng dụng Cửa hàng HTML5/JS.

1

Lỗi đến vì bạn đã khai báo một số biến toàn cục/cục bộ khớp với thuộc tính trình duyệt mặc định. Một cái gì đó như

var window = ''; 
var navigator = ''; 

Hãy thử xóa/nhận xét tuyên bố như vậy và xem hiệu ứng.