预解析视频老师示例不理解

预解析视频老师示例不理解

var name="xm";

var age=18;

function fn(argument){

console.log(name);

var name="xh";

var age=10;

}

fn();

首先函数预解析的时候所有Var声明变量都是undifined,逐行读代码的时候function函数跳过,直接执行fn()。。那么现在函数一上来就console.log(name),由于函数函数还没有读取到var name="xh";这一步,那根据函数作用域链console.log(name)可以直接向外部查找name="xm"。。。所以这个示例的最终结果不应该是xm吗??求解!有点懵

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
小丸子爱吃菜 2017-11-16 09:28:00

FN里面的name 和age放在函数中的最上面。

小丸子爱吃菜 2017-10-25 17:08:22

http://img1.sycdn.imooc.com/climg/59f053c500013e7304240418.jpg

上图显示了预解析时全局变量和函数内部变量的情况,函数内部在预解析时会先将name、age等变量放在函数中的最上面,不过值都是undefined;所以当逐行解析到consold.log(name)时,还未解析到var name="xh",所以就是undefined。你也可以将下面的 var name="xh"这行代码注释一下,看看打印是什么?如果将这行代码注释掉,那么name就会顺着作用域链往上找找到var name="xm"

祝学习愉快!

  • Nero_x #1
    将name、age等变量放在函数中的最上面这句话的意思是把FN里面的name 和age也一起放到最上面吗
    2017-11-15 22:55:36
  • 留白未来 回复 Nero_x #2
    这里有个声明提前(hoisting)的问题. hoisting:即js中函数内声明的变量,在预解析时都会被提到最前面,无论写多靠后.
    2017-11-30 12:18:47
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师