《悟透javascript》学习笔记:四、函数的魔力

引言

 

JavaScript的代码就只有 function 一种形式,function 就是函数的类型。也许其他编程语言还有 procedure method 等代码概念,但在 JavaScript 里只有 function 一种形式。当我们写下一个函数的时候,只不过是建立了一个function类型的实体而已。

 

函数类型

 

1.       定义型函数,如下:

<script language="javascript">

function func(){

      alert("hello");

}

func();

</script>

 

2.       参数型函数,如下:

<script language="javascript">

func = function(){

      alert("hello");

}

func();

</script>

 

预编译

 

想想下下面的代码,然后执行看结果

 

      <script language="javascript">

function func(){

      alert("hello");

}

func();

function func(){

      alert("hi~~");

}

func();

</script>

 

上面的代码,结果两次都弹出“hi~~”,这是为什么?原来,JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码。也就是说,在第一次调用func之前,第一个函数语句定义的代码逻辑,已被第二

个函数定义语句覆盖了。所以,两次都调用都是执行最后一个函数逻辑了。(这实际上就是因为只有一个函数变量,却多次赋值,所以当然只会保留最后一次的赋值了)

 

上面的情况出现的前提是js必须在同一代码快中,如果两个同样的函数在不同的代码块中就不会出现上面的状况了,如下:

 

<script language="javascript">

function func(){

      alert("hello");

}

func();

</script>

<script language="javascript">

function func(){

      alert("hi~~");

}

func();

</script>

 

试一试

 

1.       先用脑袋运行出结果,然后再执行比较

<script language="javascript">

func = function(){

      alert("hi~~");

}

func();

function func(){

      alert("hello");

}

func();

</script>

 

2.       先用脑袋运行出结果,然后再执行比较

<script language="javascript">

function func(){

      alert("hello");

}

func();

func = function(){

      alert("hi~~");

}

func();

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值