在函数内部编写javascript函数而不使用';新';关于主要功能?

在函数内部编写javascript函数而不使用';新';关于主要功能?,javascript,jquery,Javascript,Jquery,我现在知道这是可行的: function outerfunction(arg1, arg2, arg3) { var others; //Some code innerFunction(); function innerFunction() { //do some stuff //I have access to the args and vars of the outerFunction also I can limit th

我现在知道这是可行的:

function outerfunction(arg1, arg2, arg3) {
    var others;
    //Some code

    innerFunction();

    function innerFunction() {
        //do some stuff
        //I have access to the args and vars of the outerFunction also I can limit the scope of vars in the innerFunction..!
    }
    //Also
    $.ajax({
            success : secondInnerFunction;
        });

    function secondInnerFunction() {
        // Has all the same benefits!
    }
}

outerFunction();

所以,我不是在outerFunction上做“新”操作,而是将它用作对象!这在语义上有多正确?

您所做的似乎没有任何错误
new
用于从用作构造函数的函数构造新对象。如果没有
新建
,则不会创建对象;函数只是执行并返回结果


我假设您对闭包以及函数退出后函数和属于函数范围的其他变量如何保持活动状态感到困惑。如果是这样的话,我建议你看看。你所做的似乎没有任何问题
new
用于从用作构造函数的函数构造新对象。如果没有
新建
,则不会创建对象;函数只是执行并返回结果


我假设您对闭包以及函数退出后函数和属于函数范围的其他变量如何保持活动状态感到困惑。如果是这样的话,我建议您看看。

您没有将外部函数用作对象。您正在使用它来提供一个闭包。不可否认,边界线很细,但在本例中,您远离对象,因为您没有将任何类型的句柄传递给一些更通用的代码调用方法,您所做的只是将一些变量的范围限制在需要能够看到它们的代码中

JFTR,实际上没有必要给外部函数命名。只要调用它:

(function() { // just for variable scoping
  var others;
  ...
})()

您没有将外部函数用作对象。您正在使用它来提供一个闭包。不可否认,边界线很细,但在本例中,您远离对象,因为您没有将任何类型的句柄传递给一些更通用的代码调用方法,您所做的只是将一些变量的范围限制在需要能够看到它们的代码中

JFTR,实际上没有必要给外部函数命名。只要调用它:

(function() { // just for variable scoping
  var others;
  ...
})()

我总是做这种事。是-javascript在某种程度上模糊了对象和函数之间的边界。或者,更准确地说,javascript函数只是一个可调用的对象。如果您想拥有函数的多个实例,则只能真正使用“new”前缀。我在这里唯一的建议是,通常认为在声明函数之后调用函数是一种良好的做法(在声明函数之前调用innerFunction)——尽管这可能被认为是吹毛求疵。

我一直在做这种事情。是-javascript在某种程度上模糊了对象和函数之间的边界。或者,更准确地说,javascript函数只是一个可调用的对象。如果您想拥有函数的多个实例,则只能真正使用“new”前缀。我在这里唯一的建议是,通常认为在声明函数之后调用函数是一种良好的做法(在声明函数之前调用innerFunction)——尽管这可能被认为是吹毛求疵。

这是一个有效的示例

JavaScript中的函数是一阶对象。它们可以作为参数传递,也可以从函数返回,甚至可以设置为变量。因此,它们被称为“lambda”


因此,当您直接使用此函数(不使用
new
关键字)时,您直接将函数作为对象处理。当您使用
new
关键字时,您正在处理函数的对象实例。

这是一个有效的示例

JavaScript中的函数是一阶对象。它们可以作为参数传递,也可以从函数返回,甚至可以设置为变量。因此,它们被称为“lambda”


因此,当您直接使用此函数(不使用
new
关键字)时,您直接将函数作为对象处理。当您使用
new
关键字时,您正在处理函数的一个对象实例。

感谢所有人的回答,他们都对我很有价值,帮助我很好地理解了这个概念,但系统不允许接受多个答案!:)谢谢大家的回答,它们都对我很有价值,帮助我很好地理解了这个概念,但系统不允许接受多个答案!:)