繁体   English   中英

此代码块中javascript中的变量范围有什么问题?

[英]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) ,这就是为什么fundefined 您可以通过添加console.log(arguments)来验证这一点。

如果您将一个函数传递给fun1 ,那么它将起作用,例如

fun1(fun1);

但是,我相信您只是想直接传递f

return decoratefun.call(this, f); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM