首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaScript中变量的局部和全局作用域

JavaScript中变量的局部和全局作用域
EN

Stack Overflow用户
提问于 2012-12-14 18:54:19
回答 3查看 227关注 0票数 0

我试着阅读了其他关于这个主题的帖子,但还没有成功。在下面的代码中,为什么f2()不能访问f1()中定义的变量。变量“名称”不是f2()函数的全局变量吗?f2()不应该看到变量"name“吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function f1() {
     var name = "david";
     function f2() {
        document.writeln(name);
     }
     document.writeln(name);
  }                   

  f2(); // does not write out "david".
EN

回答 3

Stack Overflow用户

发布于 2012-12-14 18:56:42

您的f2()仅在f1()范围内定义。你不能全局调用它

票数 8
EN

Stack Overflow用户

发布于 2012-12-14 19:04:58

Javascript是函数级作用域,而不是块作用域。一个函数可以访问它的父函数变量,但不能访问它的函数中定义的变量。您可以从f1返回f2并以这种方式调用它

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     function f1() {
         var name = "david";

         document.writeln(name);

         return f2

         function f2() {
            document.writeln(name);
         }

      } 

var f2 = f1();
f2();
票数 1
EN

Stack Overflow用户

发布于 2012-12-14 18:59:23

您需要阅读有关Javascript闭包的知识。

这是您的代码片段的一个版本,它演示了如何从内部函数中的外部函数访问变量(如果您想全局调用内部函数)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function f1()
{
   var name = "david";
   return function()
   {
      console.log(name);
   }
}
var f2 = f1();
f2();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13884655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文