js中立即执行函数会预编译吗_js函数中的预编译

myname = "global";

function func(){

alert(myname);//undefined why?

var myname = "local";

alert(myname);

}

func();

为什么全局变量有声明myname而在函数体内却获取不到值呢?(可以自己调试看看)

根据《javascript 权威指南》中的说法是,函数体在执行之前有个“预编译”状态,即在执行函数体之前,js首先对函数体中的变量进行了遍历。当“预编译”过程中发现函数体有对函数的声明,那么它会在开头部分首先进行隐式的声明。如下列代码:

myname = "global";

function func(){

var myname; //myname=undefined

alert(myname);

var myname = "local";

alert(myname);

}

func();

于是最后就出现了有全局变量,但是无法获取值的原因,因为它在函数体内被重新赋值成局部变量了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值