全局变量返回undefined

时间:2016-01-18 19:57:54

标签: javascript

我是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
});

2 个答案:

答案 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:我可能错误地解释了您的代码,但我希望它能帮助您解决问题;)