收集许多变量的更短方法

时间:2018-09-12 17:04:25

标签: javascript jquery

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();

2 个答案:

答案 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;
}