简短
的回答:第一段代码什么都不做,因为 embedGameSwfAfterReg 没有返回语句。如果 API.registerOnload 在执行之前没有准确地检查它的参数,它甚至可能会以错误告终。
第二段代码创建了一个匿名函数,该函数作为参数传递给 API.registerOnload 方法,该方法(据我从方法名称中可以看出)在 Onload 事件期间运行函数。
长答案:
在第一段代码中,您声明了一个名为 embedGameSwfAfterReg 的新函数,该函数在代码的全局范围内抵抗:
function embedGameSwfAfterReg() {
// calls embedGameSwf function
}
之后,您执行定义的函数并将结果传递给名为 API 的对象的 registerOnload 方法:
API.registerOnload(embedGameSwfAfterReg());
正如您可能提到的,声明的函数 embedGameSwfAfterReg 没有返回语句,因此其执行结果将是未定义的。换句话说
API.registerOnload(embedGameSwfAfterReg());
正在做同样的事情
embedGameSwfAfterReg();
API.registerOnload();
所以最终它调用 API.registerOnload() 没有传递任何参数!
第二段代码创建了一个匿名函数(函数是JS中的特定对象,可以传递给其他函数/方法,有自己的方法并执行)。然后它将创建的函数(或者更好地说是对函数的引用)传递给 registerOnload - 称为“API”的对象的方法。
您应该阅读有关 JS 中的对象、函数类型、作用域、匿名函数和闭包的主题。我会建议Mozilla JavaScript 指南
也可以随意在 jsfiddle上玩一个简化的示例, 它为 JS 中的匿名函数提供了一些实用提示。