了解Javascript Block - 2返回?

时间:2014-05-07 07:52:11

标签: javascript angularjs

我不太确定以下JS代码的作用:

myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!"
        }
    };
});

对于那些使用Angularjs的人而言,代码看起来很熟悉,但这两个回报令我感到困惑。我认为这是Javascript中的一种典型技术,但我之前从未见过。

有人可以为我揭开这一点吗?

4 个答案:

答案 0 :(得分:2)

第一个return语句返回带有属性的对象文字。该属性是一个名为sayHello的函数。

简化版可能如下所示:

function getStuff() {
    return {
        someFunction: function() {
            return 'Hello World';
        }
    }
}
var o = getStuff();
console.log(o.someFunction());

答案 1 :(得分:1)

让我们将其分解为不同的概念。首先是外部呼叫:

myApp.factory('helloWorldFromFactory', function() {
    // irrelevant for now
});

您正在factory上调用函数myApp,并传递两个参数:字符串'helloWorldFromFactory'和函数。在JavaScript中,函数是第一类对象:这意味着你可以传递它们并将它们存储在变量中,就像使用数字,字符串等一样。例如:

// Store a function into a variable myFunction
var myFunction = function(x) { return x*2; };

// Invoke the function through the variable
myFunction(5);

// Pass the function to another function
someFunction(myFunction);

好的,第一个函数体(factory()的第二个参数):

function() {
    return {
        sayHello: // let's ignore it for now
    };
}

这是一个返回包含属性sayHello的JavaScript对象的函数。这个属性可以是任何东西,但在这种情况下,它是另一个函数:

function() {
    return "Hello, world!"; 
}

首先,您将函数传递给factory()。当有人调用该函数时:

// hypothetical code somewhere in the framework:
var theObject = yourStoredFunction();

这将返回上述对象。现在,如果其他一些代码使用这样的对象:

var greeting = theObject['sayHello']();

这将调用最里面的函数,并返回字符串"Hello, world!"

答案 2 :(得分:0)

当你运行zhe factory时,它会给你一个对象:

{sayHello: function() {
    return "Hello, World!"
}}

第一个返回意味着什么。然后第二个意思是你使用object.sayHello,它会返回一个字符串“Hello,World!”。

答案 3 :(得分:0)

角度术语中的用法示例:

myApp.controller('MyCtrl', function ($scope, helloWorldFromFactory) {
    $scope.helloString = helloWorldFromFactory.sayHello();
});