如何解决返回函数和使用function.innerFunction有什么区别?
| 这是我似乎经常遇到的一个普遍问题: 我什么时候应该使用function Bla(){return function(){alert(\"bla\");}}
并调用主函数Bla
,
我什么时候应该使用
function Bla(){function innerBla(){alert(\"bla\");}}
叫call3ѭ
它们之间有什么区别?
解决方法
这是两种不同的做事方式,它们的运作方式也不同。
第一个是返回另一个函数的函数。因此,要调用内部函数,您需要先调用外部函数ѭ1((返回内部函数),然后调用返回的值(内部函数):
function Bla(){
return function(){
alert(\"bla\");
}
}
Bla()(); // will alert \"bla\"
第二个只定义了一个内部函数,并且没有办法从外部函数外部调用该内部函数,因为它的作用域仅在外部函数Bla
内:
function Bla(){
function innerBla () {
alert(\"bla\");
}
}
Bla(); // will do \'nothing\'
Bla.innerBla
是undefined
,因为对象(函数是JavaScript中的对象)Bla
没有附加称为called11ѭ的成员。
如果要像bla.innerBla
这样调用它,则应执行以下操作:
function bla () { /* */ }
bla.innerBla = function () {
alert(\"bla\");
};
bla.innerBla();
// will alert \"bla\" because the `bla` object now has a member called `innerBla`.
或者,您可以具有以下内容(我经常使用的模式):
function bla () {
return {
innerBla: function () {
alert(\"bla\");
}
};
}
bla().innerBla(); // will also alert \"bla\"
如果要使用构造函数模式(new
),则需要执行以下操作:
var bla = function () {
this.innerBla = function () {
alert(\"bla\");
};
};
var b = new bla();
b.innerBla();
这等效于以OO语言在对象实例上具有公共属性。
最后,如果要通过bla
的每个\'instance \'(通过构造函数实现,即使用new
关键字调用bla
)公开innerBla
,则应将函数添加到bar.prototype.innerBla
:
var bla = function () { /* */ };
bla.prototype.innerBla = function () {
alert(\"bla\");
};
var b1 = new bla(),b2 = new bla();
b1.innerBla(); // will alert \"bla\"
b2.innerBla(); // will also alert \"bla\"
这类似于使用静态方法。
另外,请避免使用大写字母开头的函数(pascal-case)命名函数,因为按照惯例,通常我们仅将需要使用new
关键字调用的函数(构造函数)大写。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。