en.javascript.info/1-js/04-object-basics/04-object-methods/2-check-syntax/solution.md
paroche a95a2f5725
Update solution.md
Wording change. (I actually like the original wording "does not give understanding" -- very concise, and communicates clearly. It's just a bit non-standard in usage).
2019-09-12 17:24:05 -06:00

37 lines
1.1 KiB
Markdown

**Error**!
Try it:
```js run
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)() // error!
```
The error message in most browsers does not give us much of a clue about what went wrong.
**The error appears because a semicolon is missing after `user = {...}`.**
JavaScript does not auto-insert a semicolon before a bracket `(user.go)()`, so it reads the code like:
```js no-beautify
let user = { go:... }(user.go)()
```
Then we can also see that such a joint expression is syntactically a call of the object `{ go: ... }` as a function with the argument `(user.go)`. And that also happens on the same line with `let user`, so the `user` object has not yet even been defined, hence the error.
If we insert the semicolon, all is fine:
```js run
let user = {
name: "John",
go: function() { alert(this.name) }
}*!*;*/!*
(user.go)() // John
```
Please note that brackets around `(user.go)` do nothing here. Usually they setup the order of operations, but here the dot `.` works first anyway, so there's no effect. Only the semicolon thing matters.