范围 JavaScript
Scope JavaScript
我是 JavaScript 的新手。在下面的代码中,当我登录时,我尝试从数据库中获取用户信息并将其存储在 user
对象中。但是,当我检查 commandManager
范围内的用户时,它变为 null
。我怎样才能让 user
而不是 null
?
代码如下:
function LogInCommand(username, password) {
return new Command(function (user) {
api
.logIn(username, password)
.then(function (data) {
user = data;
console.log(user);
})
.catch(function (error) {
console.log(error);
});
});
}
function createCommandManager() {
var user = null;
return {
execute: function (command, ...args) {
command.execute(user, ...args);
},
user: user
};
}
var commandManager = createCommandManager();
commandManager.execute(new LogInCommand("andy@gmail.com", "123456"));
setTimeout(function() {
console.log(commandManager.user);
}, 10000);
结果如下:
{age: 21, connection: null, email: "andy@gmail.com", name: "andy", pendingConnection: null, …}
null
感谢大家的帮助!
因为您直接更改了 user
变量。它会破坏引用并且不会起作用。
如果你想用你的方式去做。您可以像下面这样更改您的代码。
function LogInCommand(username, password) {
return new Command(function (initialData) {
api
.logIn(username, password)
.then(function (data) {
initialData.user = data;
console.log(initialData.user);
})
.catch(function (error) {
console.log(error);
});
});
}
function createCommandManager() {
var initialData = {
user: null,
};
return {
execute: function (command, ...args) {
command.execute(initialData, ...args);
},
data: initialData
};
}
commandManager.execute(new LogInCommand("andy@gmail.com", "123456"));
setTimeout(function() {
console.log(commandManager.data.user);
}, 10000);
代码中很明显的一点是没有以正确的方式关闭并且缺少命令。
我是 JavaScript 的新手。在下面的代码中,当我登录时,我尝试从数据库中获取用户信息并将其存储在 user
对象中。但是,当我检查 commandManager
范围内的用户时,它变为 null
。我怎样才能让 user
而不是 null
?
代码如下:
function LogInCommand(username, password) {
return new Command(function (user) {
api
.logIn(username, password)
.then(function (data) {
user = data;
console.log(user);
})
.catch(function (error) {
console.log(error);
});
});
}
function createCommandManager() {
var user = null;
return {
execute: function (command, ...args) {
command.execute(user, ...args);
},
user: user
};
}
var commandManager = createCommandManager();
commandManager.execute(new LogInCommand("andy@gmail.com", "123456"));
setTimeout(function() {
console.log(commandManager.user);
}, 10000);
结果如下:
{age: 21, connection: null, email: "andy@gmail.com", name: "andy", pendingConnection: null, …}
null
感谢大家的帮助!
因为您直接更改了 user
变量。它会破坏引用并且不会起作用。
如果你想用你的方式去做。您可以像下面这样更改您的代码。
function LogInCommand(username, password) {
return new Command(function (initialData) {
api
.logIn(username, password)
.then(function (data) {
initialData.user = data;
console.log(initialData.user);
})
.catch(function (error) {
console.log(error);
});
});
}
function createCommandManager() {
var initialData = {
user: null,
};
return {
execute: function (command, ...args) {
command.execute(initialData, ...args);
},
data: initialData
};
}
commandManager.execute(new LogInCommand("andy@gmail.com", "123456"));
setTimeout(function() {
console.log(commandManager.data.user);
}, 10000);
代码中很明显的一点是没有以正确的方式关闭并且缺少命令。