返回函数和使用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
关键字调用的函数(构造函数)大写。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...