<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
is not Defined 的错误?我已经使用参数对象传递了f
,为什么第二次调用显示f
not Defined?这对我来说有点奇怪,我认为 f
仍然在 fun1()
的链调用范围内,那么为什么解释器会提示呢?
最佳答案
I have pass 'f' using arguments object, why the second call says 'f' not defined?
arguments
指的是从 decoratefun
返回的匿名函数的参数:
return function(){
};
正如您所看到的,这没有定义任何参数,您在调用函数 (fun1()
) 时也没有向它传递任何参数。因此,您最终会在不带任何参数的情况下调用 decoratefun.apply(this,arguments)
,这就是 f
为 undefined
的原因。您可以通过添加 console.log(arguments)
来验证这一点。
如果您将函数传递给 fun1
,例如
fun1(fun1);
但是,我相信您只是想直接传递 f
return decoratefun.call(this, f);
关于javascript - 此代码块中 javascript 中的变量范围有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803661/