[英]What is wrong with scope of variable in javascript in this code block?
<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
的错误? 我已经使用参数对象传递了f
,为什么第二个调用说f
未定义? 这对我来说有点奇怪,我认为f
仍然在fun1()
调用链中,所以解释器为什么会抱怨呢?
我使用参数对象传递了“ 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.