function abc(){
var a = 'lorem';
var b = 'ipsum';
//... and so on - abot 20 variables.
// do something with the variables.
}
许多函数中都需要此变量,因此我尝试创建一个通用函数只是为了给它们一个值:
function givemevars(){
var a = 'lorem';
var b = 'ipsum';
...
}
然后
function abc(){
givemevers();
console.log(a);
}
结果:undefined;
我知道,我首先应该在任何函数外部声明所有变量(例如
var a; var b;...
),但问题是-有没有更短的方法?
更新
我也尝试过:
function givemevars(){
a = 'lorem';
}
function abc(){
givemevers();
console.log(a);
}
结果-undefined
function givemevars(){
a = 'lorem';
}
function abc(){
givemevars();
console.log(a);
}
abc();
答案 0 :(得分:3)
您可以将多个变量重新构造为object
并将其包装到诸如giveMeVars()
的方法中,并在需要任何值时仅使用object.key
表示法调用。< / p>
function giveMeVars() {
const myVars = {
a: 'lorem',
b: 'ipsum',
c: 'zipsum'
//... and so on - abot 20 variables.
// do something with the variables.
}
return myVars;
}
function abc() {
let gotVars = giveMeVars();
console.log(gotVars.a);
}
abc();
为什么您的现有系统不起作用?
因为它在givemevars()
上有错字,并且缺少方法调用,即abc()
。让我们这样尝试吧。
function givemevars() {
a = 'lorem';
}
function abc() {
givemevars();
console.log(a);
}
abc()
答案 1 :(得分:1)
好的,这里需要几件事。 首先是对JavaScript中的functional scope的理解。 这将帮助您了解为什么未定义console.log;
第二,如果您有20个松散变量,则可能需要将它们放入对象中。
let variableContainer = {a:'ipsum', b:'lorum', c: 'whatever'};
variableContainer.d = 'something'; //add new variable or change existing
console.log(variableContainer.a); //access a
console.log(variableContainer); //view all
现在,您只需传递该对象即可获取其内容。 您总是必须声明所有变量,问题在哪里?
您可以通过在函数外声明它,创建一个全局对象(或变量)来进行第一个思考。从那里可以在脚本中的任何位置(包括内部函数)调用它。
但是,全局变量通常不是一个好习惯。在使用Givemevars函数之前,您已经有了一些正确的想法。尝试这样的事情:
function doWorkWithVariables(){
let variableObject = givemevars();
//now we do work with variables without having to make them global
console.log('vars', variableObject);
}
function givemevars(){
const myVariableObject = {
a: 'ipsum',
b:'lorem',
c:'something'
}
return myVariableObject;
}