为什么这样做:
a = []
a.push(['test']);
(function() {alert('poop')})()
Run Code Online (Sandbox Code Playgroud)
但这给出了错误"数字不是函数":
a = []
a.push(['test'])
(function() {alert('poop')})()
Run Code Online (Sandbox Code Playgroud)
唯一的区别是第2行末尾的分号.我已经写了很长时间的Javascript.我知道自动分号插入,但我无法弄清楚会导致此错误的原因.
Cha*_*ion 12
看看这个链式函数调用的例子.
a.push(['test'])(function() {alert('poop')})()
Run Code Online (Sandbox Code Playgroud)
看起来熟悉?这就是编译器/解释器查看代码的方式.
详情
这是用于描述调用表达式的语法的一部分.
CallExpression : MemberExpression Arguments CallExpression Arguments CallExpression [ Expression ] CallExpression . IdentifierName
基本上每个组(...)都被视为原始MemberExpression的参数. a.push
a.push (['test']) // MemberExpression Arguments
(function() {alert('poop')}) // Arguments
() // Arguments
Run Code Online (Sandbox Code Playgroud)
或者更正式
CallExpression(
CallExpression(
CallExpression(
MemberExpression( a.push ),
Arguments( (['test']) )
),
Arguments( (function() {alert('poop')}) )
),
Arguments( () )
)
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |