Motive behind strict mode syntax error when deleting an unqualified identifier?

后端 未结 2 1617
慢半拍i
慢半拍i 2020-12-24 15:22

I\'m having trouble understanding why, in strict mode, a syntax error occurs when delete is used on an unqualified identifier.

In most cases, it makes s

2条回答
  •  离开以前
    2020-12-24 15:26

    You are talking about Section 11.4.1, paragraph 5.a. of the specs:

    1. Else, ref is a Reference to an Environment Record binding, so
      a. If IsStrictReference(ref) is true, throw a SyntaxError exception.
      b. Let bindings be GetBase(ref).
      c. Return the result of calling the DeleteBinding concrete method of bindings, providing GetReferencedName(ref) as the argument.

    What you called "unqualified identifiers" is officially named "Environment Record binding".

    Now, to your question. Why throw a SyntaxError when 5.c. would fail anyway? I think you answered it yourself!

    Strict mode must do a runtime check here, because a TypeError is thrown when this is encountered.

    That's right. But it's always better to fail fast. So, when there is a chance of detecting a SyntaxError (at parse time), that opportunity should be taken.

    Why? It saves you the trouble of fixing your app if an error occurs. Think about IDEs that may show you the error right away, as opposed to hours of debugging.
    Also, such restrictions may be advantageous for optimized JIT compilers.

提交回复
热议问题