2010-05-19 36 views
3

在試圖瞭解Web服務器是如何工作的,我來到這個防空火炮:空JavaScript函數如何實際執行某些操作?

//myfile.js 
function donothing(){}; 

//myfile.html 
javascript:donothing(open('http://www.acme.com/whatever.jpg','','left=100, right=0, top=100, scrollbars=no, status=no, titlebar=no, resizable=no, toolbar=no, menubar=no, width=255, height=255')) 

我沒有JavaScript的專家,所以我不明白怎麼一個空函數可以進行工作。有人知道嗎?

謝謝。

回答

19

這是一個自制的void替代方案,以避免表達式返回值。

window.open將返回對打開的窗口的引用,並且這可能會有意想不到的結果。

例如,嘗試將javascript:a=1粘貼到地址欄中 - 這會導致一個空白屏幕,其中編號爲1,因爲瀏覽器默認會嘗試使用任何表達式運行的結果作爲新文檔。

爲了避免這種情況,您使用javascript:void(a=1)作爲void將不返回任何內容,因此結果不被用作新文檔。

使用donothing(foo=bar)或等效的Function.prototype(foo=bar)不需要,因爲內置的void完全相同。

但頭腦,使用無效的是只有將文本複製到地址欄,當需要時,它不是必需的,當您使用中的鏈接(你永遠不反正)僞協議javscript:

+0

+1:享受你的第一個尼斯答案徽章:) – 2010-05-19 22:47:53

2

donothing函數被傳遞一個它忽略的參數。然而,這是工作的參數本身。

+1

實際上,爲了將參數傳遞給donothing,它首先被執行。函數的RESULT(返回值)(在這種情況下打開)然後傳遞給數據庫。 – Konerak 2010-05-19 11:45:57

+0

這就是我的意思。 – 2010-05-19 11:58:29

3

做這項工作的人是open(...)。在調用函數之前首先評估操作數(並且Javascript不關心函數操作數的數量)。

0

好吧,雖然很難理解donothing這一點而沒有看到代碼的其餘部分......無論如何將評估open函數。 如此有效地發生的是open函數被調用。

爲什麼他們正在使用donothing做到這一點很難沒有其他信息:)

+0

感謝大家的反饋。 donothing()位於.js文件中,並用於以下超鏈接:Click me Gulbahar 2010-05-19 12:16:04

+0

什麼是更奇怪的是,當我單擊此類超鏈接時,Fiddler代理不顯示任何內容: -/ – Gulbahar 2010-05-19 12:43:59

+0

它不是奇怪的是,如果圖像是從緩存中提供的。選擇其中一個答案作爲解決方案? – 2010-05-19 12:48:05

1

調用donothing只是充當護罩說。打開的功能在調用之前被調用。

顯然是誰寫了它覺得赤裸的JavaScript:電話是脆弱的。奇怪。

0

但頭腦,將文本複製到地址欄時,只需要使用無效的,其時,沒有必要使用僞協議javscript:在鏈接(你應該永遠不會做反正)。

不是100%爲真。如果你在html中輸入<a href="javascript:1+2;">clickme</a>,許多瀏覽器仍會給你一個空白的屏幕,其返回值在Javascript中的計算結果爲true。例如,當您使用模板語言自動生成標記時,這也是在<a>標記中使用void運算符的確切原因。

相關問題