在JS控制台上播放我遇到了一个奇怪的语法。我不知道是否有人能告诉我更多的对..Javascript:围绕逗号分隔表达式的圆括号
试试这个:
>(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
所以逗号分隔的表达式括号内进行评估,分配恰好是反对全局作用域,但名为函数声明引用保持被困在里面就像关闭 更多... 把该行放在函数声明中调用新的:
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
所以在命名的功能不能被引用既没有括号内。
命名的功能都没有“媚惑”,因为它们不是_function declarations_(使用'function'作为语句),所以它们实际上是_function expressions_(使用'function'作为操作符)。 –