There are four semantic functions of the curly braces in JS
Semantic 1, organizing compound statements, which is the most common
Copy Code code as follows:
if (condition) {
//...
}else {
//...
}
for () {
//...
}
semantic 2, Object Direct Volume declaration
Copy Code code as follows:
var obj = {
Name: ' Jack ',
Age:23
};
The whole is an assignment statement, where {name: ' Jack ', age:23} is an expression.
Semantic 3, declaring a function or function as a direct amount
Copy Code code as follows:
Function F1 () {
//...
}
var F2 = function () {
//...
}
The difference between F1 and F2 is that the former is in the grammatical interpretation period and the latter is in the operating period. The difference is that if the code that calls the function has no difference after the function is defined, if the code calling the function is still callable before the function definition, F2 will F1 the error, prompting F2 undefined.
Semantic 4, syntactic notation for structured exception handling
Copy Code code as follows:
try {
//...
}catch (ex) {
//...
}finally{
//...
}
Here the braces are different from the conforming statement (Semantic 1), if there is only one statement in the curly brace, the curly braces in if/else/for can be omitted, but try/catch/finally cannot be omitted.
The following code is tangled up in a couple of years
Copy Code code as follows:
function () {} ()//anonymous function executes immediately, parsing period
{}.constructor//Get constructor for object direct quantity, parsing period error
What is puzzling is why [].constructor writes without an error, one is the constructor to get the object's direct quantity, and one is the constructor that gets the direct quantity of the array.
Of course, adding a variable to receive will not error
var c = {}.constructor;
The same situation as
The var fn = function () {} () does not have an error.
In fact, JS "statement first" in the mischief, that is, {} is understood as a compound statement block (semantic 1) rather than object Direct (semantic 2) or declaration function (semantic 3) semantics.
function () {} (), the curly braces are understood as compound statements, and the syntax of the functions () in front of nature () to declare the grammar incomplete causes an error in the parsing period.
{}.constructor, curly braces are interpreted as compound statements, followed by a dot operator, and the dot operator has no reasonable object. Naturally, it also complains.
Repair is well known: Add a force operator ()
(function () {}) (), (function () {});//force it to be understood as a function (semantic 3), and "function ()" means execute the function, which is executed immediately after the declaration.
({}). constructor//({}) forces the curly braces to be understood as Object Direct (semantic 2), "object. xx" means to get the members of the object, and the dot operator behind it is normal to perform.