【问题标题】:Unable to access variable无法访问变量
【发布时间】:2025-12-25 16:20:08
【问题描述】:

我有两个外部 Javascript 文件。我在一个文件中声明了一个变量,并试图从另一个文件中访问该变量。当我尝试访问它时,它返回undefined

<script src="script1.js"></script>
<script src="script2.js"></script>

脚本1

$(function(){

    var myvar=35;
});

脚本2

$(function(){

    alert(myvar); //this line causing error undefined.

});

【问题讨论】:

  • 你在哪里定义myVar?是否在函数内?
  • 你确定 script1 被加载了吗?如果没有,请尝试在 script1 中包含一条 alert 语句并查看它是否触发,或者更好的是,检查是否有任何 404 响应。
  • 你确定它叫 srcipt1 而不是 script1?
  • 确定我正在使用带断点的开发人员工具,首先初始化 myvar,然后才在脚本中使用
  • 抱歉无法放所有代码

标签: javascript variables global-variables


【解决方案1】:

您的变量不是全局变量。您已在函数内声明它,因此它是该函数的本地函数。您需要将var 语句移出您的文档就绪函数:

var myvar=35;

$(function(){
    // other document ready stuff here, including
    // using or assigning a value to myvar if needed
});

然后它将是全局范围的,并且可以从其他脚本文件访问(只要它们包含在声明它的文件之后)。

如果您在文档准备好之前不知道要分配的值,请执行以下操作:

var myvar;       // declare variable

$(function(){
    myvar = 35;  // assign value
});

由于在其他脚本的文档就绪处理程序运行之前您不会尝试使用该值,所以这很好。

【讨论】:

  • 如果我在准备好的函数上声明了那些也不能访问???????????????
  • 在另一个函数中声明的任何东西都是该函数的本地函数。因此,如果您在准备好的处理程序中声明了函数,但实际上希望它们是全局的,则需要将这些函数声明移到与 myvar 相同的外部。
【解决方案2】:

Script1.js

  var i=10;

Script2.js

  function call(){
      alert(i);
  }

示例.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<script type="text/javascript" charset="utf-8" src="Script1.js" ></script>
<script type="text/javascript" charset="utf-8" src="Script2.js" ></script>
<script>
</script>
<BODY onload='call();'>
</BODY>
</HTML>

希望对你有帮助

【讨论】:

  • 当我不使用 jquery 时可能会有所帮助
【解决方案3】:

除了答案之外,如果您在第一个 javascript 文件中删除了 'var' 关键字,您的代码就可以工作。 . . .

删除 'var' 会将值分配给全局变量,如果不存在,则会创建一个全局变量。 . .so,它将与全局 myvar 相同

  <script src="script1.js"></script>
  <script src="script2.js"></script>

脚本1:

$(function(){


myvar=35;

});

脚本2:

$(function(){

alert(myvar); //this will work

});

【讨论】: