javascript回调闭包未定义的变量

时间:2014-04-26 00:53:55

标签: javascript node.js phantomjs

我今天遇到了一些新事物。我想在节点中使用phantomjs并设置幻像npm模块npm link。问题在于你如何获得" document.title"。请查看他们在网站上的示例代码。

他们是如何将文档注入回调函数的?通常它会作为回调中的参数传递,但不知何故文档可用而不通过回调参数传递。

有人可以解释一下这是怎么做到的吗?还解释为什么有人会这样做而不只是通过参数?

var phantom;

phantom = require('phantom');

phantom.create(function(ph) {
  return ph.createPage(function(page) {
    return page.open("http://www.google.com", function(status) {
      console.log("opened google? ", status);
      return page.evaluate((function() {
        return document.title;
      }), function(result) {
        console.log('Page title is ' + result);
        return ph.exit();
      });
    });
  });
});

1 个答案:

答案 0 :(得分:0)

也许正如本question and answer中所解释的,PhantomJS有一个特殊功能,它在全局范围内放置(创建)windowdocument个对象。

通常,这是通过在不使用var关键字的情况下为变量分配内容来完成的。

实施例

var test = function(cb){
    document = 'test';
    cb();
}

test( function(){
    console.log(document);
});