js 变量 函数名的提升

函数定义时候

function  函数名(){

......

}

调用时候,可以在函数之前调用 函数名();这就是函数名的提升


如果采用赋值的方式定义函数

例如 

<pre name="code" class="javascript"><script type="text/javascript">
alert(foo); //打印函数2
window.οnlοad=function(){
	alert(foo);//打印函数1 将2覆盖
	document.write(foo(20)); //执行函数1
	
}
//赋值定义函数   函数1
var foo = function(){
	return 11;
}
//声明式定义函数  函数2
function foo(x) {
    if (x > 100) {
         var tmp = x - 100;
    }
    return tmp;
}

</script>


 函数2 定义后直接提升到代码头部,所以第一个 alert(foo)打印函数2的内容。 

函数1定义后,相当于覆盖了函数2的定义,所以onload中的alert打印函数1的内容。document.write

执行函数一也就理所应当了。如果没有函数2,在上面调函数foo将会打印undefined,也就是这种方式函数不会提升

其实函数一在生命时候,变量foo也提升至代码头部 ,但是没有赋值,执行到函数1位置时候才将匿名函数赋值给变量foo。

既然如此,变量foo 和函数foo 均提升到代码头部,那么代码如果改成这样,第一个alert() 会执行foo函数还是foo变量那?

alert(foo); //打印函数2
window.οnlοad=function(){
	alert(foo);
	document.write(foo(200)); 
	
}

function foo(x) {
    if (x > 100) {
         var tmp = x - 100;
    }
    return tmp;
}
var foo;

结果是:执行函数foo ,不管 var foo 变量跟foo(x)函数的位置如何互换。

那么是不是可以说,同级别相同名字的函数和变量同时声明,不管位置如何,函数都会覆盖变量?可以看到变量只声明,却没有赋值,如果为变量赋值的话  将上诉代码改成var foo =2;并与函数调换位置试验下,第一个alert()会怎么工作那,结果是照样打印函数内容。 代码如下:

<script type="text/javascript">
alert(foo); <span style="font-family: Arial, Helvetica, sans-serif;">//打印函数</span>

alert(foo(200)); //打印函数
window.οnlοad=function(){
	alert(foo);//打印变量
	document.write(foo(200)); //报错
	
}
var foo =2; //在这赋值 ,声明提升
function foo(x) {
    if (x > 100) {
         var tmp = x - 100;
    }
    return tmp;
}

</script>
如果改成这样

var foo =2;
function foo(x) {
    if (x > 100) {
         var tmp = x - 100;
    }
    return tmp;
}
alert(foo)//打印2 因为函数飞升了;
alert(foo(200)); //报错 

alert只打印变量,函数总是报错。看来同名的函数和变量会有这么多需要注意的地方,实际编程就不要这样做了吧。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值