这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 JS 声明式函数与赋值式函数, 结合实例形式分析了 JS 函数解析的流程与执行顺序, 需要的朋友可以参考下
本文实例讲述了 JS 声明式函数与赋值式函数。分享给大家供大家参考,具体如下:
引言
"程序是不会骗人的" 我们项目中的一个哥们经常这样说,为什么他会有这样的感叹呢?就是有时候我么程序员会出现的这样的问题,当我们让别人来调试错误的时候,别人什么都没有说,在我们给人家复现错误的时候发现,错误竟然没有了,留下自己在风中凌乱。此处中枪的童鞋们请顶起来。。。。。。下面说说小编给别人调 BUG 时候遇到的问题如下:
请听题:说出下面几段 js 脚本的结果是什么?
- <script type="text/javascript">
- Fn(); //执行结果:?????
- function Fn(){
- alert("执行了定义式函数");
- }
- </script>
- <script type="text/javascript">
- Fn(); //执行结果:?????
- var Fun= function(){
- alert("执行了赋值式函数");
- }
- </script>
- <script type="text/javascript">
- Fn(); //执行结果:?????
- function Fn(){
- alert("执行了函数1");
- }
- function Fn(){
- alert("执行了函数2");
- }
- </script>
如果你能很好的得出答案的话,说明你对 JS 的这两种函数以及他们在执行顺序方面是比较清楚的,所以下面的讲解你就可带着审判的眼光来阅读了,否则的话你就不得不好好看看下面的讲解了,也许下面的讲解会给你一些额外的惊喜。
通过上面的代码中 alet 中的内容我们就可以分辨出这两种函数,这两种函数在 js 执行的时候会出现一些区别,在 JS 的预编译期,声明式函数将会先被提取出来,然后才按顺序执行 js 代码。
事实上,JS 的解析过程分为两个阶段:预编译期 (预处理) 与执行期。
预编译期 JS 会对本代码块中的所有声明的变量和函数进行处理(类似与 C 语言的编译),但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。知道了这个原理以后我们就可以很好的分析上面的第一段 js 代码了,第一个 js 代码块得出的结果是:执行了 alert 函数;而第二个 js 代码块得出的结果是:浏览器保存,提示函数未定义!这就是这两种函数的不同。
第二段 js 代码就是买一赠一优惠政策,给读者赠送的一些东西了,它执行的结果是:弹出 "执行了函数 2", 这是因为在 js 中重名的函数,后定义的会覆盖前面定义的函数,这种策略和 js 的顺序执行也是有关系的。小编在最近就是因为遇到了这种函数给我代码的麻烦所以才查了一些资料来整理了这篇博客。
小结
在开始的时候代码中写是赋值式函数,但是调用的代码写在了函数的前面从而导致程序出错,因为之前对于赋值式函数见到的并不多,这不知道这两种函数的区别,所以相当热的认为将调用函数的代码写在函数定义之前和之后是没有影响的,所以给小编带来很大的困惑。当然也是我们思想上的相当然带来的后果,一些东西我们并没有去验证就认为应该是这样的,从而给我们带来阻碍,在此也给广大程序猿们警告哦。。。
希望本文所述对大家 JavaScript 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0520/329613.html