在函数中使用参数调用变量

时间:2019-02-18 10:54:23

标签: javascript html

我已经在函数外部定义了变量,并且我需要能够根据函数调用的参数来调用变量。

HTML

<button id="Area300" style="left:755px;" onclick="a('normal', 'Area300')"></button>

JAVASCRIPT

var Area300_Data = "somedata"
function a(data, data1) {
  if (data=='extra') {
    //do something
  } else if (data=='normal') {
    console.log(data1+_Data)
    //Should display "somedata"
  }
}

如何将data1的参数与_Data结合使用(在这种情况下)获得Area300_Data

6 个答案:

答案 0 :(得分:3)

除非您使用Lazy Loading,否则可能不起作用。 其次,eval将充当变量,除非您将其添加为字符串。因此,要么将其放在引号中,要么使用模板文字

_Data
var Area300_Data = "somedata"

function a(data, data1) {
  if (data == 'extra') {
    //do something
  } else if (data == 'normal') {
    console.log(eval(`${data1}_Data`))
    //Should display "somedata"
  }
}

答案 1 :(得分:2)

如果您位于全局范围内,则每个var都存储到window

所以您可以

window[`${data1}_Data`]

答案 2 :(得分:0)

您可以将数据保留在Object中,并像属性一样访问该数据

例如

var data = {
 Area300_Data : "somedata"
}

现在您可以像这样动态地访问该数据

function a(data, data1) {
  if (data=='extra') {
    //do something
  } else if (data=='normal') {
    console.log(data[data1+'_Data'])
    //Should display "somedata"
  }
}

比访问窗口对象更具可读性

答案 3 :(得分:0)

data1+_Data在名为+data1的两个变量之间应用_Data运算符。您不能像这样访问变量。
在这种情况下,Area300_Data在全局范围内,并使用var进行声明,因此它存在于window中。您可以使用括号符号window[]访问它

var Area300_Data = "somedata"
function a(data, data1) {
  if (data=='extra') {
    //do something
  } else if (data=='normal') {
    console.log(window[`${data1}_Data`])
    //Should display "somedata"
  }
}
<button id="Area300" style="left:755px;" onclick="a('normal', 'Area300')">button</button>

但是,我宁愿将数据保留在名为Data的对象中并从那里访问它

let Data = {
   Area300:"somedata"
}
var Area300_Data = "somedata"
function a(data, data1) {
  if (data=='extra') {
    //do something
  } else if (data=='normal') {
    console.log(Data[data1])
    //Should display "somedata"
  }
}
<button id="Area300" style="left:755px;" onclick="a('normal', 'Area300')">button</button>

答案 4 :(得分:0)

为什么不尝试创建一个使用data1作为键的对象呢?

var gobalInfo = {
   Area300: "somedata"
}
function a(data, data1) {
  if (data=='extra') {
    //do something
  } else if (data=='normal') {
    console.log(globalInfo[data1]);
    //Should display "somedata"
  }
}

答案 5 :(得分:0)

只需使用eval即可获取变量数据。例如

var Area300_Data = "300 Area Data";
var Area600_Data = "600 Area Data";

function a(data, data1) {
  if (data == 'extra') {
    //do something
  } else if (data == 'normal') {
    console.log(eval(`${data1}_Data`))
    //Should display "somedata"
  }
}
<button onclick="a('normal','Area300')">Click to see Area300</button>
<button onclick="a('normal','Area600')">Click to see Area600</button>