Bu kod neden bir hata veriyor?(işlev durumu() {}) işlev gövdesi sıkı modda olduğunda bir sözdizimi hatası veriyor?
// global non-strict code
(function eval() { 'use strict'; });
Canlı tanıtım:http://jsfiddle.net/SE3eX/1/
Peki, biz burada var adlandırılmış işlev ifadesidir. Bu işlev ifadesinin sıkı olmayan kodda göründüğünü açıkça belirtmek isterim. Gördüğünüz gibi, onun işlev gövdesi sıkı bir koddur.
katı mod kuralları Buradasınız: http://ecma-international.org/ecma-262/5.1/#sec-C
alakalı madde bu bir (listede son kapı) 'dir: bu kural geçerlidir nasıl
It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the Identifier of a FunctionDeclaration or FunctionExpression or as a formal parameter name (13.1). Attempting to dynamically define such a strict mode function using the Function constructor (15.3.2) will throw a SyntaxError exception.
Bildirim IF_FUNCTION beyanı/İfadenin kendisi, yukarıdaki örneğimde değil, sıkı bir kodda görünür.
Yine de bir hata mı atıyor? Niye ya?
Sadece burada tamamen tahmin, ama belki de bir * ifadesi *, bir isim ile bir işlev örnekleme ifadesi sadece bu işlevin içinde * adını * bağladığı gerçeğiyle bir ilgisi vardır; Diğer bir deyişle, dahili bir varyasyon, fonksiyona referansla başlatılan bir yerel değişken oluşturmak için bir “var” beyanı için bazı sihirli bir yol varmış gibi. Böylece, küresel sembolü "eval" yerel olarak bağlama girişiminde bulunuyormuşsunuz gibi. – Pointy
@Pointy İyi ipucu. Bu senaryoda tam olarak neler olup bittiğini belirlemek için standardı kontrol etmem gerekecek ... –
Aynı hata mesajını (SyntaxError: İşlev adı, katı modda değerlendirmeler veya argümanlar olmayabilir) yalnızca "function eval() ile") alırsınız. {'katı kullanın'; }; ' – some