一般来说,把一个函数当参数传进去都是这样写的 $('#xx').append(function(){ /*some code*/
return xxx
})但是最近看vue的源码的时候,发现有这样的写法:是我孤陋寡闻,感觉这种写法真的很少见。 因为我一直以为 //定义
function fn(cb){
cb()
}
//调用
fn(function(){ /*some Code*/
});
/*这个相当于cb=function(){}*/
/*然后cb()*/不知道这种理解对不对传匿名函数和传非匿名函数有什么异同呢?是不是在一个参数的位置声明了一个非匿名函数,在参数外也可以调用?就比如:function fn1(cb){
cb()
}
fn1(function fn2(){ /*code*/});
fn2()希望有老司机带我一波。。。
1 回答
慕后森
TA贡献1802条经验 获得超5个赞
是不是在一个参数的位置声明了一个非匿名函数,在参数外也可以调用?
答案:不是。
function fn1(cb){ cb() } fn1(function fn2(){ /*code*/}); fn2(); // Uncaught ReferenceError: fn2 is not defined(…)
这样的写法其实差异性不太大,我个人觉得写成命名函数(fn2
)比匿名函数多一个功能,在命名函数(fn2
)内部可以通过fn2
访问该函数,比如你需要递归的时候可以用到。
var i = 1;function fn1(cb){ cb() } fn1(function fn2(){ console.log(i); if(i < 5) { i++; // 递归 fn2(); } else { return } });
添加回答
举报
0/150
提交
取消