Javascript内部函数与冒号

时间:2013-02-28 05:22:16

标签: javascript function colon

我想知道内在的功能是什么样的? 我知道你可以写下面的

var obj = {
       test: 'something'
}

但是在这段代码中,innerfunction不是指变量,而是指函数。 有没有其他方法可以编写/调用内部函数?

function outer(){

    var a = "Outerfunction";
    console.log(a)

    innerFct: function InnerFct()    {                                              
            var c = "Inner";
            console.log(c)
    }innerFct();
}
window.outer();

谢谢

3 个答案:

答案 0 :(得分:2)

这里有几件不同的事情。

在此代码中:

var obj = {
    test: 'something'
}

您正在使用“文字对象表示法”来创建 - 具有一个属性test的对象,该属性的值为something

在第二种情况下,您正在创建一个代码块(是的,对象和代码块使用相同的语法{...}定义它们很有趣。

在代码块内部,innerFct:成为标签。标签与一些控制流语句一起使用以跳转。忘了他们,你最好不要使用它们。

function outer(){
    var a = "Outerfunction";
    console.log(a)

    function innerFct()    {                                              
        var c = "Inner";
        console.log(c)
    }
    innerFct();
}
outer();

甚至

function outer(){
    var a = "Outerfunction";
    console.log(a)

    var innerFct = function ()    {                                              
        var c = "Inner";
        console.log(c)
    }
    innerFct();
}
outer();

答案 1 :(得分:1)

您将functionsobjects混淆。

使用对象时,冒号用于显示键值对。

var object = {
  innerFct: function(){
    console.log('rawr');
  },
  someVariable: 7
}

object.innerFct(); //logs rawr
object.someVariable = 4; //just changed from 7 to 4

使用冒号如何在示例中使用它是不正确的语法。此外,当您在这样的对象中创建函数时,您不必再次命名该函数,因为您已将其分配给对象上的名称。

然后你可以通过这样的方式随时编辑这个功能:

object.innerFct = function(){
  //new code
}

执行object.innerFct()将调用该函数。

答案 2 :(得分:0)

其他答案已充分涵盖了对象语法并在范围内调用了该函数。正如我在评论中提到的,你可以这样做:

function outer(){
    (function () {
        var c = "inner";
        console.log(c)
    })();
}
window.outer();

它记录inner就好了。

修改:原始代码示例中的innerFct等私有/隐藏变量也可以在闭包中捕获。

outer = function() {
    var innerFct = function () { console.log("inner"); }
    // innerFct is captured in the closure of the following functions
    // so it is defined within the scope of those functions, when they are called
    // even though it isn't defined before or after they complete
    window.wrapper = function() { innerFct(); }
    return function() { innerFct(); }
}
outer();

// each of these next three lines logs "inner"
window.wrapper();   // assigned to global variable
outer()();          // calling the returned function
var innerFctBackFromTheDead = outer(); // saving the returned function
innerFctBackFromTheDead();

还有对象构造函数/原型语法。

function Outer() {
    this.inner = function() {
        this.c = "inner";
        console.log(this.c);
    }
}

var out = new Outer();
out.c;       // undefined
out.inner(); // logs "inner"
out.c;       // "inner"

有关新关键字和原型的更多信息:http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/