我正在尝试使用JavaScript制作数据模块,但无法从外部访问数据,而当我尝试从内部记录数据时,一切工作正常
'use strict;'
function manager() {
let data = {};
function define(name, surname, age) {
let length = Object.keys(data).length;
data[`user${length + 1}`] = {
name: name,
surname: surname,
age: age
};
}
function get(num) {
return data[`user${num}`];
}
return {
define: define,
get: get
};
};
manager().define('John', 'Smith', 17);
console.log(manager().get(1));
//undefined
答案 0 :(得分:3)
每次调用manager
时,都会定义一个名为data
的新变量,并为其分配值{}
。
因此manager().define('John', 'Smith', 17);
创建一个对象,为其分配一些数据,然后该对象超出范围并被垃圾回收。
然后console.log(manager().get(1));
创建一个新对象,其中没有数据。
定义变量并将对象分配给函数 函数。
答案 1 :(得分:1)
请使用模块模式,执行过程将像这样
var manager = (function() {
'use strict';
let data = {};
function define(name, surname, age) {
let length = Object.keys(data).length;
data[`user${length + 1}`] = {
name: name,
surname: surname,
age: age
};
}
function get(num) {
return data[`user${num}`];
}
return {
define: define,
get: get
};
}());
manager.define('John', 'Smith', 17)
console.log(manager.get(1))
var manager = (function() {
'use strict';
let data = {};
function define(name, surname, age) {
let length = Object.keys(data).length;
data[`user${length + 1}`] = {
name: name,
surname: surname,
age: age
};
}
function get(num) {
return data[`user${num}`];
}
return {
define: define,
get: get
};
}());
manager.define('John', 'Smith', 17)
console.log(manager.get(1))