JS コンソールで遊んでいると、奇妙な構文に直面しました。誰かがそれについてもっと教えてくれるのだろうか..
これを試して:
>( function f(){console.log('i am f')} , (function x(){console.log('i am x')})() , y=2 , console.log('hello') )
i am x
hello
undefined
>f()
ReferenceError: f is not defined
>this.y
2
これは失敗します:
( var c=2 ) SyntaxError: 予期しないトークン var
そのため、括弧内のコンマ区切りの式が評価され、代入はたまたまグローバル スコープに反しますが、名前付き関数宣言の参照はクロージャーのように内部に閉じ込められたままになります。
function C(){
( function f(){console.log('i am f')} , (function x(){console.log('i am x')})() , y=2 , console.log('hello') )
}
次にインスタンス化します。
>var c=new C()
i am x
hello
undefined
>c.y
undefined
>this.y
2
グローバルスコープで実行されたのとまったく同じように起こります!
この構造の使用法/目的は何ですか?
もう1つ:
>( function f(){console.log('i am f')} , f() )
ReferenceError: f is not defined
したがって、名前付き関数は括弧内でも参照できません。