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

标签 javascript scope chain

<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),这就是 fundefined 的原因。您可以通过添加 console.log(arguments) 来验证这一点。

如果您将函数传递给 fun1,例如

fun1(fun1);

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

return decoratefun.call(this, f); 

关于javascript - 此代码块中 javascript 中的变量范围有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803661/

相关文章:

javascript - 无法启用电子邮件/密码身份验证提供商

javascript - 使用 HTML5/JS 的移动设备后置摄像头

c++ - 在哪里定义嵌套类的函数?

python - 在 python 中读取父级的范围

eclipse - 更改 Eclipse 侧边栏垂直范围突出显示

javascript - AngularJS - "Chaining promises"以及其间的其他函数

javascript - AngularJS : factory to return data from a php service using $http

javascript - 在 Firebase 上部署 Angular2 应用程序

Unix:链接命令

javascript - 打破 promise 链的好方法是什么?