Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数全局变量未定义?_Javascript_Function_Global Variables - Fatal编程技术网

Javascript函数全局变量未定义?

Javascript函数全局变量未定义?,javascript,function,global-variables,Javascript,Function,Global Variables,我想创建一些仪表,但仪表对象仍未定义 var doesntwork; function create_gauge(name, id, min, max, title, label) { name = new JustGage({ id: id, value: 0, min: min, max: max, donut: false, gaugeWidthScale: 0.3, counter: true, hideInne

我想创建一些仪表,但仪表对象仍未定义

var doesntwork;
function create_gauge(name, id,  min,  max,  title,  label) {
  name = new JustGage({
    id: id,
    value: 0,
    min: min,
    max: max,
    donut: false,
    gaugeWidthScale: 0.3,
    counter: true,
    hideInnerShadow: true,
    title: title,
    label: label,
    decimals: 2
  });
}
create_gauge(doesntwork, "g2", 0, 100, "Füllstand", "%");
console.log(doesntwork); //undefined

为什么??我不能将变量传递给函数吗?

不,只能传递值,不能传递变量引用或指针

对于这个简单的例子,返回似乎更合适

var works;
function create_gauge(id,  min,  max,  title,  label) {
  return new JustGage({
    id: id,
    value: 0,
    min: min,
    max: max,
    donut: false,
    gaugeWidthScale: 0.3,
    counter: true,
    hideInnerShadow: true,
    title: title,
    label: label,
    decimals: 2
  });
}
works = create_gauge("g2", 0, 100, "Füllstand", "%");
console.log(works);

然而,我相信这可能过于简化了。JS中有“引用类型”,因此如果
works
持有对象,则可以传递对象引用的值,并让函数填充对象的属性

var works = {};
function create_gauge(obj, id,  min,  max,  title,  label) {
  obj.data = new JustGage({
    id: id,
    value: 0,
    min: min,
    max: max,
    donut: false,
    gaugeWidthScale: 0.3,
    counter: true,
    hideInnerShadow: true,
    title: title,
    label: label,
    decimals: 2
  });
}
create_gauge(works, "g2", 0, 100, "Füllstand", "%");
console.log(works.data);

不,只传递值,不传递变量引用或指针

对于这个简单的例子,返回似乎更合适

var works;
function create_gauge(id,  min,  max,  title,  label) {
  return new JustGage({
    id: id,
    value: 0,
    min: min,
    max: max,
    donut: false,
    gaugeWidthScale: 0.3,
    counter: true,
    hideInnerShadow: true,
    title: title,
    label: label,
    decimals: 2
  });
}
works = create_gauge("g2", 0, 100, "Füllstand", "%");
console.log(works);

然而,我相信这可能过于简化了。JS中有“引用类型”,因此如果
works
持有对象,则可以传递对象引用的值,并让函数填充对象的属性

var works = {};
function create_gauge(obj, id,  min,  max,  title,  label) {
  obj.data = new JustGage({
    id: id,
    value: 0,
    min: min,
    max: max,
    donut: false,
    gaugeWidthScale: 0.3,
    counter: true,
    hideInnerShadow: true,
    title: title,
    label: label,
    decimals: 2
  });
}
create_gauge(works, "g2", 0, 100, "Füllstand", "%");
console.log(works.data);

请分享什么是
JustGage
,原语是按值传递的,
doesnetwork
未定义的
-原语。因此,如果在函数中将其修改为
name
,则对
doesnetwork
变量没有影响。为什么不从函数中返回
new JustGage
的结果呢?这是一个用于创建量规的javascript附加组件。确实,不能将变量的引用传递给函数,只能传递值。您可以尝试,但实际上您应该遵循@KarlReid的建议,只需使用
返回值即可。@KarlReid:一切都是“按值传递”。仅因为对象是引用类型值,并不意味着它们是“按引用传递”。“通过引用传递”的意思是:
var a={};var b=a;b={};console.log(a==b)/*这在JavaScript*/
中是不正确的。请分享什么是
JustGage
,原语是按值传递的,
doesnetwork
未定义的
-原语。因此,如果在函数中将其修改为
name
,则对
doesnetwork
变量没有影响。为什么不从函数中返回
new JustGage
的结果呢?这是一个用于创建量规的javascript附加组件。确实,不能将变量的引用传递给函数,只能传递值。您可以尝试,但实际上您应该遵循@KarlReid的建议,只需使用
返回值即可。@KarlReid:一切都是“按值传递”。仅因为对象是引用类型值,并不意味着它们是“按引用传递”。“通过引用传递”的意思是:
var a={};var b=a;b={};console.log(a==b)/*这在JavaScript*/
中是不正确的。