程宇寒 2019-08-20 18:36 采纳率: 100%
浏览 426
已采纳

javascript中局部变量和全局变量同名的疑惑,有具体代码,请小伙伴赐教!

javascript中局部变量和全局变量同名的疑惑,有具体代码,请小伙伴赐教!
直接po代码和截图
为什么打印出来的是江西省于都县
谁能解释一下?

<script type="text/javascript">
var address = "江西省于都县";
    function f6(){
        console.log(address);
    }

    function f7(){
        var address = "江西省赣州市于都县";
        f6();
    }

    f7(); //结果为江西省于都县
    </script>

在f7函数中调用了f6函数,那应该相当于如下代码啊

var address = "江西省于都县";
    function f7(){
        var address = "江西省赣州市于都县";
        //f6(); //f6函数应该相当于下面这一行代码啊
        console.log(address);
    }

图片说明
图片说明

  • 写回答

4条回答 默认 最新

  • 爱前端不爱恋爱 2019-08-28 17:21
    关注

    你的f6 和f7 都是局部的 如果你没有定义全局变量adress 然后直接 调用f7 ;f6会报错 adress 未定义;两个局部的变量是要通过参数传递 并不是在f7定义了一个adress
    f6 就能拿到的 ,拿不到就要看 自身的块级链有没有 adress 没有就去方法的arguments参数里 找 在没有就要看全局

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • Yirujet 2019-08-20 22:41
    关注

    f6调用的时候需要打印address这个变量,在f6函数作用域内部并没有这个变量,所以会往f6更上一层作用域查找,即全局作用域,找到了address,值为江苏省于都县

    评论
  • 老王快秃了啊. 2019-08-20 20:54
    关注

    跟在那调用没关系,是看你函数在哪调用的吧

    评论
  • Uncle丶怪叔叔 2019-08-21 11:14
    关注

    f6函数属于全局函数,所有对象都能调用的并使用。f9函数属于f8()局部函数,故f8函数输出变量会网上找f9函数的变量名,如果想将f6函数像f9函数那样使用的话,将f6函数改为立即执行函数修改作用域应该就可以了吧

    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已采纳回答 3月21日

悬赏问题

  • ¥15 B660主板安装xp系统老是出现错误怎么办
  • ¥15 定义过的变量报错未定义
  • ¥15 如何在EXCEL某单元格中查找是否存在另一列中的内容。
  • ¥50 非对称加密(相关搜索:密码学)
  • ¥15 关于非编程寻迹小车的分析
  • ¥15 java导出EXCEL这里已经执行成功了,但是流浪器没有下载
  • ¥15 帮我把代码改的能正常运行就行
  • ¥50 有限元修正、模型修正、最小二乘法,详细步骤
  • ¥15 用plc编写梯形程序
  • ¥15 关于#物联网#的问题:新大陆AIOT中,按照手册教程进行添加,设置完成后网关一直不上线,显示Never这是网络服务的信息