【发布时间】:2019-01-18 17:01:38
【问题描述】:
我试图从该模块(在init() 函数中)内的嵌套函数(基本上是一个 xhr 回调 (Api.get()) 设置模块变量/属性,但它不起作用,我不知道为什么.
//posts
var Posts = (function() {
//array of all posts objects
var data = null;
//initialize the posts module
var init = function(callback) {
if(data === null) {
//load all posts
loadAll(function(response){
// data = JSON.parse(response)
var posts = JSON.parse(response)
//create array
data = posts;
// call callback
console.log(data)
callback()
})
}
}
// return all posts from api as json
var loadAll = function(callback) {
Api.get('/api/posts/get', function(response) {
callback(response)
})
}
//public interface
return {
data: data,
init: init,
loadAll: loadAll
}
})();
调用Posts.init() 后,我将Posts.data 登录到控制台,但它仍然是null。但是,init() 方法中的console.log(data) 记录了我试图分配给Posts.data 的预期对象数组。似乎回调中的data 是Posts.data 之外的另一个变量。有人可以解释一下原因吗?如果可能的话,提供一个解决方案来在Api.get() 中设置模块data 属性?
【问题讨论】:
-
您返回的对象有一个指向
null的数据属性。稍后更改data变量,不会更改返回对象中的值。
标签: javascript module scope callback