首先,据我了解,某些语法 javascript 和 actionscript 在函数方面的操作方式非常相似。在这两种语言中,我都需要将局部变量添加到某种事件侦听器中。例如在动作脚本中:
public class Foo {
public function handleBar():void {
this.bla(); this.blabla();
}
public function createButton():void {
SomeSortOfButton button = new SomeSortOfButton();
//HERE COMES THE AWKWARD PART:
button.addEventListener(MouseEvent.CLICK,
(function (foo:Foo) {
return function (event:MouseEvent):void {
//I want to do stuff with foo, hence the function that returns a function.
foo.handleBar();
};
})(this)
);
}
}
在 javascript (+jquery) 中,我不时有这样的事情:
var foo = ......;
$("#button").click(
(function(bar) {
return function(event) {
//do stuff with bar (which is defined as foo in the first line)
};
)(foo)
);
我喜欢它的工作方式,但就语法而言,恕我直言,这是完全不行的。有没有其他选择?我在 actionscript 中尝试的是在处理程序中使用默认参数:
public class Foo {
public function handleBar():void {
this.bla(); this.blabla();
}
public function createButton():void {
SomeSortOfButton button = new SomeSortOfButton();
//HERE COMES THE ALTERNATIVE:
button.addEventListener(MouseEvent.CLICK,
function (event:MouseEvent, foo:Foo = this):void {
//I want to do stuff with foo, hence the function that returns a function.
foo.handleBar();
}
);
}
}
但这是不允许的,因为foo:Foo = this在编译时无法解决。很公平,但我仍然想知道,在 javascript 和 actionscript 中是否有上述构造的语法糖?我非常喜欢使用单个函数,而不是返回函数的函数。
我希望答案的形式是:“(据我所知,)没有其他方法可以传递局部变量”或“是的,你可以这样做:....”。
但是,当然,非常感谢任何评论!