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关键字则意味着您正在声明一个新变量。由于JavaScriptvar
具有全局和函数级作用域,因此每当您使用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