我是Javascript的新手,所以请原谅我的琐碎错误。我编写了以下脚本,其中res
应该是脚本文件中的全局变量。我在方法中设置全局res
,然后在另一个方法中访问它,但问题是,this.issue
在方法Y中返回undefined
但在方法X中未定义我给它分配一个值。那是为什么?
方法X在方法Y之前调用。
var res;
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express', shortenedUrl: ''});
});
router.X('/yolo', jsonParser, function(req, res, next) {
this.res = res;
console.log("this.res: "+ this.res); // this.res not undefined here
Y();
});
function Y(){
console.log("this.res: "+ this.res); // this.res here becomes undefined
});
答案 0 :(得分:0)
这与我们所谓的范围有关。函数内的this
与该函数的特定范围相关,因此,在您的情况下,this.res
始终是您使用它的函数的本地函数。
访问全局res
的正确方法是仅使用res
,但是您的另一个冲突来自函数参数,具有相同的名称。
我建议:
var res;
router.X('/yolo', jsonParser, function(req, _res, next) {
res = _res;
console.log("res: ", res);
Y();
});
function Y(){
console.log("res: ", res); // res will now have the correct value
});
P.S。:在控制台日志中也使用,
而不是+
,以便控制台输出完整的对象树。
答案 1 :(得分:0)
Javascript中的问题是无法在 this 的函数内设置全局变量。在您的情况下,变量返回undefined,因为 res 未在函数外部定义。 要解决此问题,您可以使用
window.res
这意味着在您的代码中:
var res;
/* GET home page. */
router.get('/', function(req, res, next) {
window.res.render('index', { title: 'Express', shortenedUrl: ''});
});
router.X('/yolo', jsonParser, function(req, res, next) {
window.res = res;
console.log("this.res: "+ this.res);
Y();
});
function Y(){
console.log("this.res: "+ window.res); // it becomes no longer undefined
});
PS:我可能错误地解释了您的代码,但我希望它能帮助您解决问题;)