Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数内部的全局变量不能在外部访问_Javascript - Fatal编程技术网

Javascript 函数内部的全局变量不能在外部访问

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

如果我理解正确,在函数中声明一个变量而不使用关键字var将创建一个全局范围的变量

但是当从容器函数外部访问变量时,我得到了这样一个“ReferenceError:oopsGlobal未定义”

,,,
 // 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
的赋值不是声明。它只是一个赋值,在实际执行赋值之前,不会创建全局属性。