Javascript 函数定义无法理解
我知道一些javascript函数声明。像EXPRESSION函数,匿名函数,但我不明白这两个函数的语法是什么?有人能告诉我这两个函数的名字吗?我的意思是“操纵数据:函数(输入)”和“getDataById:函数(id)” 为什么return语句可以用这种语法返回两个函数?为什么不一次返回一个函数而不是两个函数?如果你能给我一些参考文件,那就太好了?谢谢Javascript 函数定义无法理解,javascript,angularjs,Javascript,Angularjs,我知道一些javascript函数声明。像EXPRESSION函数,匿名函数,但我不明白这两个函数的语法是什么?有人能告诉我这两个函数的名字吗?我的意思是“操纵数据:函数(输入)”和“getDataById:函数(id)” 为什么return语句可以用这种语法返回两个函数?为什么不一次返回一个函数而不是两个函数?如果你能给我一些参考文件,那就太好了?谢谢 app.service('MyService', function ($http, $q, $angularCacheFactory) {
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)在全局范围内,并且始终是公共的。它可能完全是模块内部的东西,因此不需要“污染”全局范围。使用对象有助于声明模块的公共接口,同时保持其他内容的私有性。我明白了。谢谢大家。