Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS through2 Arrow函数this.push()_Javascript_Arrow Functions_Lexical Scope - Fatal编程技术网

Javascript JS through2 Arrow函数this.push()

Javascript JS through2 Arrow函数this.push(),javascript,arrow-functions,lexical-scope,Javascript,Arrow Functions,Lexical Scope,我对JavaScript中的词法绑定有问题。 这是我的代码: .pipe(through.obj((url, enc, done)=>{ if(!url) return done(); request.head(url, (err, response)=>{ this.push(url + ' is ' + (err ? 'down' : 'up') + '\n'); done(); })

我对JavaScript中的词法绑定有问题。 这是我的代码:

.pipe(through.obj((url, enc, done)=>{
        if(!url) return done();
        request.head(url, (err, response)=>{
            this.push(url + ' is ' + (err ? 'down' : 'up') + '\n');
            done();
        });
    }))
我得到这个错误:

TypeError: this.push is not a function
但是当我使用es5函数语法时,比如
函数(url,enc,done){…}

.pipe(through.obj(function(url, enc, done){
        if(!url) return done();
        request.head(url, (err, response)=>{
            this.push(url + ' is ' + (err ? 'down' : 'up') + '\n');
            done();
        });
    }))
那么我的代码工作得很好

在这种情况下,如何将此.push()与箭头函数一起使用? 我知道Arrow函数的词法绑定,但我不知道如何使用
这个


感谢您阅读我的文章。

在前一种情况下,您的
指向
窗口
对象。这就是为什么你会出错

arrow
函数不提供自己的
this
绑定(它们保留封闭词法上下文的this值)

在arrow函数中,这将保留封闭词法的值 就是这样。在全局代码中,它将设置为全局对象:

var globalObject=此;var foo=(()=>this);console.log(foo()=== 全局对象);//真的

请特别查看箭头功能部分