2016-09-28 70 views
0

我有以下腳本here瞭解`if(document.createEvent){..}`沒有括號的函數調用嗎?

function download(filename, text) { 
    var pom = document.createElement('a'); 
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); 
    pom.setAttribute('download', filename); 

    if (document.createEvent) { 
     var event = document.createEvent('MouseEvents'); 
     event.initEvent('click', true, true); 
     pom.dispatchEvent(event); 
    } 
    else { 
     pom.click(); 
    } 
} 

download('test.txt', 'Hello world!'); 

現在我不明白的if (document.createEvent)用法:

我讀的問題In JavaScript, does it make a difference if I call a function with parentheses?答案,看了一些其他問題。

在大多數例子中,像window.onload = initAll;var ret = Multiply;這樣的引用,但顯然不是這種情況。對我來說,最有趣的例子是:

function Multiply(operator, operand) { 
    return operator * operand; 
} 
var operator = 3; 
var operand = 4; 
var ret = Multiply; 

這裏,根據筆者,Multiply沒有得到執行和ret參考功能Multiply

here它聲明調用一個沒有括號的函數是一個參考。

但是,這讓我更加困惑,因爲對於我來說,參考document.createEvent(這是創建事件的函數)是沒有意義的。

有關功能document.createEvent()(如here)的文檔沒有指出沒有參數的用法。

所以,請給我的大腦的黑暗帶來一些光。 我感謝您的幫助。

問題(短):

  • document.createEvent函數調用或引用?
  • document.createEvent返回什麼?
+1

讀取詳細信息它正在檢查document.createEvent函數是否存在。它根本就沒有調用它。在Javascript中,函數是一流的對象,可以這樣對待。 –

+1

它檢查瀏覽器是否支持'document.createEvent',如果是,則使用它,否則使用不同的方法。 – deceze

+0

[JavaScript If語句條件沒有運營商可能的重複?它是做什麼的?](http://stackoverflow.com/questions/3494614/javascript-if-statement-condition-with-no-operator-what-does-it-do) - 這正是同樣的技巧。 – Xufox

回答

1

1-JavaScript has truthy and falsy values。例如0,「」,undefined,null等值爲falsy值,而1,-1或「text」,例如對象的現有屬性爲truthy。 (如果它們的值不是虛的!) 2-自createEvent文件對象的屬性,代碼片段基本上測試該函數的存在,這意味着它的存在是真實的。我假設這個檢查與瀏覽器兼容性&方法棄用有關。 你可以從here

+0

我決定這個答案是最好的,因爲它引用了什麼樣的返回值可以讓if語句評估爲「真」。但我提出了其他答案,因爲一切都很好。謝謝。 – goulashsoup

2

document.createEvent函數調用還是引用?

這是表示表示document對象屬性的表達式。一個預計其值是參照Function對象,將創建一個事件,但它也可以是undefined

document.createEvent返回什麼?

作爲表達式,它評估爲所述屬性的當前值。

3

document.createEvent函數調用還是引用?

這是嘗試訪問document對象上的屬性。

該屬性可能存在。它可能有價值。該值可能是對函數的引用。

如果所有這些都是這種情況,那麼它將是一個真實值(並且if塊將運行)。如果它不存在,它將是一個錯誤的值(並且else塊將運行)。

這是一個測試,看看瀏覽器是否支持該功能。

document.createEvent返回什麼?

該屬性的值。如果瀏覽器支持createEvent,那麼它將評估爲函數,這是一個真正的值。