nodejs异步回调函数中this问题,求助
var val1 = 'hello me';
function test() {
var val1 = 'hello he';
fs.readFile(path.join(__dirname, '/test.js'), function(err, data){
var val1 = 'hello you' +
'';
console.log(this.val1);
console.log(this === GLOBAL);
});
}
test();
console.log
undefined true
为啥子?
求问下this为什么是全局对象?
异步回调函数中的上下文是怎么确定的?
3 回复
this关键字指向调用它的对象,test()是在GLOBAL中调用,而且异步函数回调应该形成了闭包,回调函数中的this也应该指向GLOBAL对象,而至于为啥this.vall是undefined,则是因为用var申明的变量都是局部变量,并不是GLOBAL变量的属性。
function test(){
var that = this;
var fs = require("fs");
fs.readFile(__dirname + "/test.js", function(err, data){
console.log(that.vall);
console.log(this === GLOBAL);
});
};
var scope = {vall : 'hehe'};
test.apply(scope,[]);
这段代码中输出的应该是hehe和true。 楼主好好去看看javascript中this关键字指的对象和闭包的概念吧。希望能帮到你。