在 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: Unexpected token var
所以括号内的逗号分隔表达式被评估,赋值恰好是针对全局范围的,但是命名函数声明引用就像闭包一样被困在里面...把那行放在一个用new调用的函数声明中:
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
完全一样,就像在全局范围内执行一样!
这个构造的用途/目的是什么?
多一个:
>( function f(){console.log('i am f')} , f() )
ReferenceError: f is not defined
所以命名函数不能在括号内引用。