構文チェック
重要性: 2
このコードの結果はなんでしょう?
let
user =
{
name
:
"John"
,
go
:
function
(
)
{
alert
(
this
.
name)
}
}
(
user.
go)
(
)
P.S. 落とし穴があります :)
エラーです!
やってみましょう:
let
user =
{
name
:
"John"
,
go
:
function
(
)
{
alert
(
this
.
name)
}
}
(
user.
go)
(
)
// error!
ほとんどのブラウザでのエラーメッセージは何を間違えているのか理解できません。
user = {...}
の後にセミコロンがないため、エラーになります。
JavaScript 括弧 (user.go)()
の前にはセミコロンを想定していないので、このようにコードを解釈します:
let
user =
{
go
:
...
}
(
user.
go)
(
)
そして、このようなジョイント式は構文的にはオブジェクト { go: ...}
を引数 (user.go)
をもつ関数として呼びだすことができます。また、それは let user
と同じ行で起こります。なので、user
オブジェクトはまだ定義されていないのでエラーになります。
セミコロンを挿入すると、すべてうまく行きます。:
let
user =
{
name
:
"John"
,
go
:
function
(
)
{
alert
(
this
.
name)
}
}
;
(
user.
go)
(
)
// John
(user.go)
の周りの括弧はここではなにもしないことに注意してください。通常それらは操作の順番のために設定されますが、ここではドット .
がとにかく最初に動作するので影響がありません。セミコロンだけが関係します。