2010-03-23 31 views
14

Chạy mã đơn giản sau dẫn đến "Vi phạm nghiêm ngặt". thông báo lỗi. Tôi đã cố gắng tìm tài liệu về lý do và cách khắc phục. Bất kỳ đầu vào sẽ được nhiều đánh giá cao.jslint: tại sao mã này dẫn đến thông báo lỗi "Vi phạm nghiêm ngặt"?

Lỗi:

Error: 

Problem at line 6 character 4: Strict violation. 

} (this)); 

Mẫu mã:

/*jslint browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */ 

"use strict"; 

(function (window) { 
} (this)); 

Kính trọng, Egil.

+1

Có liên quan? http://twitter.com/kangax/status/8980322050 – kennytm

+0

KennyTM, có thể, ai đó có thể xác nhận điều này? –

Trả lời

8

tôi đã có một cái nhìn tại các mã nguồn của JSLint, mà nói:

function reservevar(s, v) { 
    return reserve(s, function() { 
     if (this.id === 'this' || this.id === 'arguments' || 
       this.id === 'eval') { 
      if (strict_mode && funct['(global)']) { 
       warning("Strict violation.", this); 
      } else if (option.safe) { 
       warning("ADsafe violation.", this); 
      } 
     } 
     return this; 
    }); 
} 

Tôi đoán JSLint đó thực sự phàn nàn rằng bạn đang sử dụng this trong bối cảnh toàn cầu.

17

Để mở rộng về câu trả lời Roland Illig của:

Trong chế độ không nghiêm ngặt, this được ràng buộc với phạm vi toàn cầu khi nó không bị ràng buộc bất cứ điều gì khác. Ở chế độ nghiêm ngặt, nó không được xác định. Điều đó làm cho nó sai sót khi sử dụng nó bên ngoài một phương thức.

+1

'this' vẫn đề cập đến phạm vi toàn cầu nếu được sử dụng trong ngữ cảnh chung, nhưng không phải trong các phương thức theo chế độ nghiêm ngặt. –

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