Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数定义无法理解_Javascript_Angularjs - Fatal编程技术网

Javascript 函数定义无法理解

Javascript 函数定义无法理解,javascript,angularjs,Javascript,Angularjs,我知道一些javascript函数声明。像EXPRESSION函数,匿名函数,但我不明白这两个函数的语法是什么?有人能告诉我这两个函数的名字吗?我的意思是“操纵数据:函数(输入)”和“getDataById:函数(id)” 为什么return语句可以用这种语法返回两个函数?为什么不一次返回一个函数而不是两个函数?如果你能给我一些参考文件,那就太好了?谢谢 app.service('MyService', function ($http, $q, $angularCacheFactory) {

我知道一些javascript函数声明。像EXPRESSION函数,匿名函数,但我不明白这两个函数的语法是什么?有人能告诉我这两个函数的名字吗?我的意思是“操纵数据:函数(输入)”和“getDataById:函数(id)”

为什么return语句可以用这种语法返回两个函数?为什么不一次返回一个函数而不是两个函数?如果你能给我一些参考文件,那就太好了?谢谢

app.service('MyService', function ($http, $q, $angularCacheFactory) {
    var _dataCache = $angularCacheFactory('dataCache', { 
        maxAge: 3600000 // items expire after an hour
    });
    /**
     * @class MyService
     */
    return {
        manipulateData: function (input) {
            var output;
            // do something with the data
            return output;
        },

        getDataById: function (id) {
            var deferred = $q.defer();
            if (_dataCache.get(id)) {
                deferred.resolve(_dataCache.get(id));
            } else {
                // Get the data from the server and populate cache
            }
            return deferred.promise;
        }
    };
});

这些函数只是碰巧是对象中的值的匿名函数。考虑这一点:

var object = {
  add: function(x, y) {
    return x + y;
  }
};

object.add(1, 2); // = 3
这与:

function addFunction(x, y) {
  return x + y;
}

var object = {
  add: addFunction
};

object.add(1, 2); // = 3

这些函数没有什么特别之处,因为它们只是对象的正常属性。

在本例中,您返回的不是函数,而是对象

在angularjs中定义
服务
时,必须在回调中提供其实现(app.service的第二个参数) 此回调必须返回要使应用程序的其他部分可用的方法

然后在控制器或其他服务中,您将能够写入:

app.controller("MyCtrl", ["MyService", function(MyService) {
  MyService.getDataById('an id');
}]);

Angular Service返回绑定到应用程序命名空间的服务实例,
return
语句中的那些函数是可以使用的公共方法。基本上是一个包含两个方法的对象
manufactedata
,和
getDataById

和这个差不多

function company() {
  let product; // This is private

  // Public Methods
  return {

    setLatestProduct: function(value) {
      product = value;
      console.log(product, ' set');
    },

    getLatestProduct: function() {
      return product;
    }
  }

}

const apple = company();
console.log(apple); // { setLatestProduct: function, getLatestProduct: function }

看看它上面的
{maxAge:3600000}
。相同的概念。就像javascript对象定义一样?是的,函数返回一个具有两个属性的对象。属性的值恰好是函数。我明白了。非常感谢。有用的补充是原因:即使用对象返回此服务的公共接口
\u dataCache
表示一个私有数据存储。这样做有什么好处吗?这样做不一定比另一种方式有什么好处。这只是开发人员目前用来解决问题的方法。@AngularJS这是因为JS没有公共/私有可见性机制<代码>函数添加函数(x,y)在全局范围内,并且始终是公共的。它可能完全是模块内部的东西,因此不需要“污染”全局范围。使用对象有助于声明模块的公共接口,同时保持其他内容的私有性。我明白了。谢谢大家。