3

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

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();

谢谢你

4

3 回答 3

3

这里发生了几件不同的事情。

在这段代码中:

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();
于 2013-02-28T05:29:52.293 回答
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()会调用函数。

于 2013-02-28T05:29:12.273 回答
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/

于 2013-02-28T05:46:26.383 回答