js的预解析

from http://www.cnblogs.com/wenber/p/3626775.html

1,js是顺序执行的,下面这个大家肯定没有异议 

 
 
test();// 哈哈
function  test(){    
 alert("哈哈");      
}
但是在C语言中,这样就不行了,C语言要求函数必须先声明后调用,那是什么原因让js有如此能力先调用而后声明了?ok,这说明js肯定是在调用函数之前就将函数放入内存中了,这种简单的机制就是我们今天要说的---js预解析

2,变量的预解析,看如下代码
alert(a);//undefined

var a="test";

和函数声明一样,变量的声明也会在一开始就被放入内存中了,但是并没有赋值,所以在它赋值之前,它的值就是undefined;

3,变量和函数重名,看如下代码

复制代码
alert(a); //function(){ return  "function"} 

var a="var"; 

function a(){ return "function" }
alert(a); // var
 
复制代码

这个就说明了,重名时,函数名优先级高于变量名

 4,js的预解析是在程序进入一个新的环境时,把该环境里的变量或函数预解析到它们能调用的环境中。即每一次预解析的单位是一个执行环境。代码如下

function a(){
     var b="function"
}

alert(b);//报错   b is not  defined

 此外,如果预解析不会跨<script>去解析,如下:

复制代码
<script type="text/javascript">
alert(b);//报错
</script>

<script type="text/javascript">
var b=1;
</script>
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值