是否有其他编写函数声明的方法

Is there another way to write a function declaration?

本文关键字:声明 方法 函数 其他 是否      更新时间:2023-09-26

在声明dbr之后编写dbr.onsuccess对我来说似乎很奇怪。

var dbr = window.indexedDB.open("Matrix");
dbr.onsuccess = function(myEvent) {}

Q: 有没有另一种写第2行的方法(不用鲁比·戈德堡(?也许类似于:

function dbr.onsuccess(myEvent) {
}

我只是关心事情的顺序。对我来说,在dbr创建之后,给它分配一个onsuccess函数似乎为时已晚。

var dbr = window.indexedDB.open("Matrix");

是一个异步请求。

异步请求在后台运行,在函数完成之前不会运行它们的回调。因此,所有其他分配都将在运行任何回调函数之前进行。

indexedDB将向您返回一个接口对象,以便您可以准确地定义这些回调函数是什么。你可以把它想象成你提出请求

嘿,我想打开矩阵

得到回复说

嘿,我正在做这个,这是一个物体。请列出我完成后你希望发生的事情。

然后,当它完成打开操作(并且当前函数上下文已经完成运行(时,它将查看该对象并相应地运行。

open的返回值并不是函数的真实结果,它只是一个返回给你的对象,告诉它该做什么。这类似于promise/deferred的做事方式,不同于普通的JS回调模型。

此:

function dbr.onsuccess(myEvent) {
}

不是有效语法。在定义对象本身之前,不能在对象上定义属性,并且javascript不支持属性的函数声明。它们仅用于顶级对象。

dbr.onsuccess = function(myEvent) {}

从技术上讲,这是一个函数表达式,因为它是对dbronsuccess属性的赋值语句。

因此,当你问是否有不止一种方法来编写函数声明时,从技术上讲,答案是否定的。

函数声明只有一种形式:

function foo() {}

您建议的将函数声明为对象属性的语法很有趣,但这个想法中的一个缺陷是函数提升。正如您可能已经知道的,函数(包括它们的定义(在范围内的任何地方都可用,甚至在前面的代码中也是如此。举个例子:

foo.bar();
var foo = getFoo();
function foo.bar() {}

由于功能吊装,foo.bar应可在1号线上使用。但由于吊装的变化,foo已被声明,但尚未被定义。在第1行,foo的值为undefined,如果您尝试调用函数foo.bar,则会导致TypeError。

我想你可以说:

var dbr = window.indexedDB.open("Matrix").onsuccess = function(myEvent) {}