Javascript 全局作用域变量调用

Javascript 全局作用域变量调用,javascript,Javascript,我试图给数组项目一个全局范围,调用数组并在函数中使用数组 var projects = [{ //GLOBAL SCOPE label: "Appels", icon: "./Appels".png", href: "./Appels".html" }, { label: "Pears", icon: "./Pears.png", href: "./Pears.html" }]; $(function() { var projec

我试图给数组
项目
一个全局范围,调用数组并在函数中使用数组

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
。 当我试着从另一个页面调用它时。(当创建2个类似于上面代码的数组时,它可以正常工作,没有错误。)

与:

我得到了这个错误:

Uncaught ReferenceError: projects is not defined

当创建2个数组时,就像第一段代码一样,它工作正常,没有错误。我想要一个项目数组,这样更容易编辑。

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

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

$(函数(){
项目=[{//本地范围
标签:“上诉”,
图标:“./Appels.png”,
href:“./Appels.html”
}, {
标签:“梨”,
图标:“./Pears.png”,
href:“./Pears.html”
}];

});
您正在本地范围中声明
项目
变量,因为您在它前面加了
var

最局部的作用域始终具有优先权,因此通过在局部作用域中重新声明变量,实际上已经覆盖了变量

要在局部作用域中使用全局作用域变量,只需像引用任何其他变量一样引用它;这意味着在本地范围内去掉
var

您已经在全局范围内声明了项目,然后在函数中再次声明它

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

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

var pageName={
项目:[{//全局范围
标签:“上诉”,
图标:“./Appels.png”,
href:“./Appels.html”
}, {
标签:“梨”,
图标:“./Pears.png”,
href:“./Pears.html”
}]
};
$(函数(){
//添加到全局变量
pageName.projects.push({标签:“橙色”,
图标:“./orange.png”,
href:“./orange.html”});
log(“全局:+JSON.stringify(pageName.projects));//全局范围
//这是一个局部变量
var项目=[{//本地范围
标签:“上诉”,
图标:“./Appels.png”,
href:“./Appels.html”
}, {
标签:“梨”,
图标:“./Pears.png”,
href:“./Pears.html”
}];
log(“local:+JSON.stringify(projects));//函数范围
});

当您声明为var时,它已经在全局范围内。在函数中删除
项目
之前的
var
关键字当您使用
var
时,您声明新变量。如果要将变量重新分配一个更高级别,只需删除函数中的
var
。第二个
var projects
初始化名为
projects
的局部变量,该变量将取代全局变量。只需删除次要变量的声明,而是通过在函数中使用
projects=[{
来分配全局变量。如果它已经是全局变量,则不需要在函数中重新定义它;它将按原样可用。(对不同范围的不同变量使用相同的名称不是一个好主意,也就是说,不要在函数中用不同的
projects
变量屏蔽全局
变量,因为这是维护的噩梦。)你应该解释原因。谢谢你的回答,我已经试过了,但我有一个错误。你能看一下吗。我已经编辑了我的后检查你编辑,但很抱歉我不能清楚地理解你面临的问题。我想这是由于第二个文件没有按正确的顺序加载,但不确定。是否可能分享完整的代码?你可以在这里使用和共享链接。@ShirshenduBhowmick检查代码片段。这对你的答案不起作用,我已经试过了,但我遇到了一个错误。你能看一下吗?我已经编辑了我的帖子
Uncaught ReferenceError: projects is not defined