理解' if (document.createEvent){.} '函数调用,不带括号

Understanding `if (document.createEvent) {..}` function call without parentheses?

本文关键字:函数调用 if document createEvent 理解      更新时间:2023-09-26

我在这里有以下脚本:

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)的用法:

我读了这个问题的答案在JavaScript中,如果我用括号调用函数会有什么不同吗?并读一些其他问题。

在大多数例子中,

是某种引用,如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

这里还声明,调用不带括号的函数是引用。

但这让我更加困惑,因为对我来说,引用document.createEvent,这是一个创建事件的函数,没有意义。

关于document.createEvent()函数的文档,如这里,没有指出没有参数的用法。

所以,请给我黑暗的大脑带来一些光明。谢谢你的帮助。

问题(短):

  • document.createEvent是函数调用还是引用?
  • document.createEvent返回什么?

document.createEvent是函数调用还是引用?

试图访问document对象的属性

该属性可能存在。它可能有一个值。该值可能是对函数的引用。

如果所有这些都是,那么它将是一个真值(并且if块将运行)。如果它不存在,它将是一个假值(并且else块将运行)。

这是一个测试,看看浏览器是否支持该功能

什么文件。createEvent回报呢?

属性的值。如果浏览器支持createEvent,那么它将作为函数计算,这是一个真值。

document.createEvent是函数调用还是引用?

是一个表达式,表示document对象的属性。我们期望它的值是对Function对象的引用,该对象将创建一个事件,但它也可能是undefined

document.createEvent返回什么?

作为一个表达式,它求值为所述属性的当前值。

1 - JavaScript有真值假值。诸如0,",undefined, null等值是 false 值,而1,-1或"text",例如对象的现有属性是 true 。(如果它们的值不是假的!)2-由于createEventdocument对象的属性,代码片段基本上测试该函数的存在,这意味着它的存在是真实的。我认为这项检查与浏览器兼容性有关&方法弃用。