是否有其他编写函数声明的方法
Is there another way to write a function declaration?
在声明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) {}
从技术上讲,这是一个函数表达式,因为它是对dbr
的onsuccess
属性的赋值语句。
因此,当你问是否有不止一种方法来编写函数声明时,从技术上讲,答案是否定的。
函数声明只有一种形式:
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) {}
- Javascript库对象方法声明
- Javascript:如何声明非全局静态方法
- 处理复杂类型时的声明方法
- 如何:在JavaScript对象中声明的Angular Factory方法
- 声明JavaScript选项对象的正确方法
- 正在使用AngularJS获取集合中的选定元素.声明性方法
- 声明Javascript名称空间的两种方法之间的区别
- jQuery命名空间声明和模块化方法
- 有没有一种方法可以使用函数参数的值来声明变量
- 用javascript在一个对象的两个键上声明两个数组的简洁方法是什么
- 我不明白在变量中声明方法或函数的概念
- Javascript中的变量声明方法
- 不可能在匿名对象中声明方法吗
- 像alert()这样的声明方法是否会覆盖Javascript中内置的alert()方法?
- 在JS中这三种声明方法的方式有什么区别吗?
- 在Javascript中动态声明方法
- 在声明方法时重复函数名
- 在类的外部声明方法
- 使用.protype声明方法的效果
- JavaScript:在对象外声明方法时意外的令牌