Javascript 函数内部的全局变量不能在外部访问
如果我理解正确,在函数中声明一个变量而不使用关键字var将创建一个全局范围的变量 但是当从容器函数外部访问变量时,我得到了这样一个“ReferenceError:oopsGlobal未定义”Javascript 函数内部的全局变量不能在外部访问,javascript,Javascript,如果我理解正确,在函数中声明一个变量而不使用关键字var将创建一个全局范围的变量 但是当从容器函数外部访问变量时,我得到了这样一个“ReferenceError:oopsGlobal未定义” ,,, // Declare the myGlobal variable below this line var myGlobal = 10 function fun1() { // Assign 5 to oopsGlobal Here oopsGlobal = 5 } // Only c
,,,
// Declare the myGlobal variable below this line
var myGlobal = 10
function fun1() {
// Assign 5 to oopsGlobal Here
oopsGlobal = 5
}
// Only change code above this line
function fun2() {
var output = "";
if (typeof myGlobal != "undefined") {
output += "myGlobal: " + myGlobal;
}
if (typeof oopsGlobal != "undefined") {
output += " oopsGlobal: " + oopsGlobal;
}
console.log(output);
}
console.log(oopsGlobal) // ReferenceError: oopsGlobal is not defined
,,,
这是因为您从未真正运行过
fun1()
。如果不调用函数,则永远不会执行其中的代码。
参考错误:
//在此行下面声明myGlobal变量
var myGlobal=10
函数fun1(){
//在此处将5分配给oopsGlobal
oopsGlobal=5
}
//仅更改此行上方的代码
函数fun2(){
var输出=”;
if(myGlobal的类型!=“未定义”){
输出+=“myGlobal:+myGlobal;
}
if(oopsGlobal的类型!=“未定义”){
输出+=“oopsGlobal:+oopsGlobal;
}
控制台日志(输出);
}
console.log(oopsGlobal)//引用错误:未定义oopsGlobal
您已经编写了代码,但从未调用过它fun1
和fun2
从不运行。我在下面添加了一行,调用导致赋值的fun1()
函数
这更像是一个提供演示的答案——很可能您不想实际编写具有全局变量或类似副作用的代码。如果您正在为浏览器编写软件,使用窗口
或全局此
存储您的全局状态也可能使其更清晰
//在此行下面声明myGlobal变量
var myGlobal=10
函数fun1(){
//在此处将5分配给oopsGlobal
oopsGlobal=5
}
fun1();//您以前编写过函数,但从未调用过它们。
//仅更改此行上方的代码
函数fun2(){
var输出=”;
if(myGlobal的类型!=“未定义”){
输出+=“myGlobal:+myGlobal;
}
if(oopsGlobal的类型!=“未定义”){
输出+=“oopsGlobal:+oopsGlobal;
}
控制台日志(输出);
}
console.log(oopsGlobal)//引用错误:未定义oopsGlobal
您没有调用/执行您的fun1()
,因此。。。你可以正确地猜出发生了什么。这就像oopsGlobal
从未定义或分配给任何全局对象。调用fun1()
就在您的console.log之前。没有var
的赋值不是声明。它只是一个赋值,在实际执行赋值之前,不会创建全局属性。