Javascript JS through2 Arrow函数this.push()
我对JavaScript中的词法绑定有问题。 这是我的代码: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(); })
.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()===
全局对象);//真的
请特别查看箭头功能部分