全局范围变量调用

时间:2018-07-09 17:44:28

标签: javascript

我正在尝试为数组projects提供全局作用域,并调用该数组并在函数中使用该数组。

var projects = [{ //GLOBAL SCOPE
    label: "Appels",
    icon: "./Appels".png",
    href: "./Appels".html"
  }, {
    label: "Pears",
    icon: "./Pears.png",
    href: "./Pears.html"
  }];

$(function() {

   var projects = [{ //LOCAL SCOPE
    label: "Appels",
    icon: "./Appels".png",
    href: "./Appels".html"
  }, {
    label: "Pears",
    icon: "./Pears.png",
    href: "./Pears.html"
  }];

  });  

如何使项目数组成为全局变量并在函数中分配它?

编辑:我试图从函数内的var中删除var projects。 当我尝试从另一个页面调用它时。 (当创建2个数组时,就像上面的代码一样,它可以正常工作而不会出现错误。)

使用:

  var randomItem1 = projects[Math.floor(Math.random()*projects.length)];

我收到此错误:

Uncaught ReferenceError: projects is not defined

在创建2个数组时,就像第一个片断代码一样,它可以正常工作而不会出错。我想要1个项目数组,因此更易于编辑。

3 个答案:

答案 0 :(得分:1)

您要在本地范围中重新声明projects变量,因为您要在变量前加上var

大多数本地作用域将始终具有优先权,因此,通过在本地作用域中重新声明变量,您实际上已经覆盖了该变量。

要在局部作用域中使用全局作用域变量,只需像对待其他变量一样引用它即可;这意味着要摆脱您本地范围内的var

答案 1 :(得分:0)

您已经有在全局范围内声明的项目,然后在函数中重新声明它。

这是一种更干净的方法,因此您不必使用冲突的变量名。(显然,不要使用相同的名称,但是在某些情况下会发生这种情况)当您有多个弹出窗口时,此示例非常有用在单个页面上,并且在全局级别上变量名冲突。

使用以下方法,您始终在该页面对象中拥有特定页面的全局变量。基本上创建一个全局页面对象,该对象存储所有必需的变量或函数。

var pageName = {
    projects : [{ //GLOBAL SCOPE
    label: "Appels",
    icon: "./Appels.png",
    href: "./Appels.html"
  }, {
    label: "Pears",
    icon: "./Pears.png",
    href: "./Pears.html"
  }]
};

$(function() {

//add to global variable
pageName.projects.push({label: "orange",
    icon: "./orange.png",
    href: "./orange.html"});
    
  console.log("Global:" + JSON.stringify(pageName.projects)); //GLOBAL SCOPE
   
   //this is a local variable
   var projects = [{ //LOCAL SCOPE
    label: "Appels",
    icon: "./Appels.png",
    href: "./Appels.html"
  }, {
    label: "Pears",
    icon: "./Pears.png",
    href: "./Pears.html"
  }];

console.log("local:" + JSON.stringify(projects)); //FUNCTION SCOPE
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:-1)

在函数中只是不要使用var关键字,而在使用var关键字时,这意味着您在声明一个新变量。由于JavaScript var具有全局作用域和函数级作用域,因此在每次使用var的函数内部,它都会创建一个新的projects变量。

如果您在函数内未使用var关键字,JavaScript将首先检查函数范围内是否有任何projects变量,在这种情况下,它将找不到任何名为projects。接下来,它将尝试在全球范围内寻找。在那里它将找到projects变量,以后将其用于所有引用和分配目的。

$(function() {

    projects = [{ //LOCAL SCOPE
    label: "Appels",
    icon: "./Appels".png",
    href: "./Appels".html"
  }, {
    label: "Pears",
    icon: "./Pears.png",
    href: "./Pears.html"
  }];

  });