2011-04-18 12 views
1

我现在知道这个工程:在函数内部编写javascript函数并且不在主函数中使用'new'是否好?

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做一个“新”,但我把它作为一个对象!这在语义上有多正确?

+0

感谢所有的答案,他们都是有价值的,我和帮助我理解这个概念很好,但系统不允许接受多个答案! :) – NikhilWanpal 2011-04-18 09:15:33

回答

1

似乎没有要什么不对,你在做什么。 new用于构造一个用作构造函数的函数的新对象。如果没有new,则不会创建对象;该函数只是执行并返回结果。

我假设你困惑的关闭,以及如何在函数退出后的功能和属于功能范围的其他变量保持活力。如果是这样的话,我建议你看看jibbering JavaScript FAQ

0

您没有使用外部函数作为对象。您正在使用它来提供关闭。毫无疑问,边界线很细,但在这种情况下,你远离对象,因为你没有将任何类型的句柄传递给一些更通用的代码调用方法,你所做的只是将一些变量的范围限制为需要能够看到它们的代码。

JFTR,实在没必要​​给外部函数的名称。只需调用它:

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

我总是这样做。是的 - JavaScript模糊了对象和函数之间的界限。或者,更准确地说,一个javascript函数只是一个可调用的对象。如果你想有多个函数实例,你只会真的使用'new'前缀。我唯一的建议是,在声明它之后调用函数通常被认为是很好的习惯(你在声明之前调用了innerFunction) - 尽管这可能被认为是挑剔。

0

这是一个有效的例子。在JavaScript

函数是一级对象。它们可以作为参数传递,从函数返回,甚至设置为变量。因此他们被称为'lambda'。

所以,当你直接使用此功能(无new关键字)你直接处理功能作为一个对象。当你使用new关键字时,你正在处理函数的一个对象实例。