<script>
var fun1 = function(){alert('original')};
function decoratefun (f){
return function(){
console.log(f.toString());
console.log(fun1.toString());
console.log('-------------');
return decoratefun.apply(this,arguments);
};
}
var fun1 = decoratefun(fun1);
fun1(); // this works
fun1()(); // but this doesn't, it complains 'f' is undefined
</script>
为什么fun1()
上的链调用会给出f
之类的错误?我使用arguments对象传递了f
,为什么第二个调用说f
未定义?这对我来说有点奇怪,我认为f
仍然在fun1()
的链调用范围内,所以为什么翻译会抱怨?
答案 0 :(得分:1)
我使用arguments对象传递'f',为什么第二个调用'f'未定义?
arguments
是指从decoratefun
返回的匿名函数的参数:
return function(){
};
正如您所看到的,当您调用函数(fun1()
)时,这不会定义任何参数,也不会向其传递任何参数。因此,您最终在没有任何参数的情况下调用decoratefun.apply(this,arguments)
,这就是f
为undefined
的原因。您可以通过添加console.log(arguments)
来验证这一点。
如果您将函数传递给fun1
,例如
fun1(fun1);
但是,我相信您只想直接传递f
return decoratefun.call(this, f);