我有一个对象ajax_tryit,它调用ajax_generic ans发送它3个函数。他们都被命名了。
使用匿名函数会更好(效率更高,速度更快)。
应用程序...这是ajax回调函数,可以执行3项操作,传递,失败或未定义(通常是php错误)。
function ajax_generic( server_response_text, pass_func, fail_func, undefined_func )
{
var aml_status = check_aml( server_response_text.slice( 0, 6 ) );
if( aml_status === Constant.AML.PASS )
{
pass_func();
}
else if( aml_status === Constant.AML.FAIL )
{
fail_func();
}
else
{
undefined_func();
}
}
function ajax_tryit( server_response_text, html_div )
{
var pass_func = function {window.location.reload()};
var fail_func = function(server_response_text) { alert( 'ajax_tryit(): ' + server_response_text ) } ;
var undefined_func = function(server_response_text) { alert( 'php error: ' + server_response_text ) };
ajax_generic( pass_func, fail_func, undefined_func );
}
答案 0 :(得分:6)
命名函数(即使用函数声明语句创建的函数)实际上非常好,因为您可以在堆栈跟踪中看到它们的名称。除此之外,只要函数在适当的范围内声明(或者范围无关紧要),它就没那么重要了。
在函数定义表达式中为函数命名在技术上是合法的,但这不是一个好主意,因为各种JavaScript引擎can't be trusted not to do something weird。
答案 1 :(得分:4)
它总是取决于哪个更清楚,所以在这种情况下我会说答案是没有。现在你有相当具有描述性的名字。将它们取出会使代码难以维护,并且会使缩进变得混乱。他们不会因为有名字而造成任何问题。
但是,您可以改变的一点是缩进和语法:
function ajax_tryit(server_response_text, html_div) {
function pass_func() {
window.location.reload()
}
function fail_func(server_response_text) {
alert('ajax_tryit(): ' + server_response_text)
}
function undefined_func(server_response_text) {
alert('php error: ' + server_response_text)
}
ajax_generic(pass_func, fail_func, undefined_func);
}
编辑:此外,在回复您的评论时:
保存3个变量......效率更高。
不,不使用变量效率不高,尤其是在这里。别担心。
答案 2 :(得分:1)
当您需要将变量传递给回调函数或更改范围时,可以使用Anon函数
示例(将参数传递给回调函数):
var somevar = "test";
setInterval( function()
{
test(somevar);
},5000);
function test(Msg)
{
alert(Msg);
}
如果你刚刚完成
setInterval(test,5000);
你会得到一个空白的警告框,非常简化的例子。
对于changing scope,请查看给出的答案,其中显示了需要更改范围的示例。
但除此之外,没有真正需要为匿名函数切换命名函数。