如何从全局作用域访问函数中的变量?

How can I access variables in a function from the global scope?

本文关键字:变量 函数 访问 全局 作用域      更新时间:2023-09-26

我不能从全局作用域访问函数中的变量。通常我可以访问其他函数中的变量。

如何在全局作用域中使用以下代码中的str变量?

 <html>
 <script>
 function myf(){
 str = "Change";
 document.write(str); 
 }
 document.write(str); // can not access str
 </script>
 <input type="button" value="OPEN" onclick="myf();">
 </html>

全局声明str以显式设置其作用域。

var str;
function myf(){
  str = "Change";
  document.write(str); 
}
myf();
document.write(str); // can access str

请记住,如果不调用myf(), str的值仍然是undefined

一般来说,由于依赖关系的问题,你不希望修改函数内部的全局变量。考虑如下内容:
function myf() {
  return "Change";
}
document.write(myf());

或者如果你需要状态:

function myf() {
  var state = "Change";
  return {
    get_state: function () {
      return state;
    },
    set_state: function () {
      //
    }
  }
}
var f = myf();
document.write(f.get_state());

你做的方式…除了你必须按正确的顺序运行代码。

当前位置:

  1. 定义(但不运行)设置str并将其写入文档的函数(在此过程中删除现有文档)
  2. 尝试使用
  3. 变量
  4. 点击运行该函数的按钮并给变量一个值

您必须交换最后两个任务的顺序…并停止在函数中使用document.write

在使用变量之前声明它们也是一种很好的做法(在JavaScript严格模式下也是必需的)。您应该将var str放在脚本的顶部。