2014-04-26 63 views
1

我今天剛碰到新東西。我想在節點中使用phantomjs,並設置了幻像npm模塊npm link。問題在於你如何得到「document.title」。請看看他們在網站上的代碼示例。javascript回調閉包undefined變量

他們是如何將文檔注入回調函數的?通常它會作爲回調中的參數傳遞,但不知何故文檔在傳遞迴調參數時不可用。

有人可以解釋這是如何完成的?也解釋爲什麼有人會這樣做,而不只是通過參數?

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(); 
     }); 
    }); 
    }); 
}); 

回答

0

也許在這個question and answer解釋,PhantomJS具有特殊的功能,其中它把(創建)的windowdocument對象在全局範圍內。

通常,這是通過將某些內容分配給變量而不使用var關鍵字來完成的。

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

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

因此這將意味着我可以病房後,我的應用程序在其他地方引用文檔和文件應提供? – uptownhr

+0

正確的是,一旦任何正在運行的腳本在全局範圍內定義'document',而沒有'var'關鍵字,任何正在運行的代碼都可以在任何地方訪問該變量。 –

+0

將其放入全局空間而不是將其作爲參數傳遞的原因是什麼? – uptownhr