我正在尝试为数组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个项目数组,因此更易于编辑。
答案 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"
}];
});