javascript预编译
来源:互联网 发布:cda转mp3软件 编辑:程序博客网 时间:2024/05/23 15:52
JavaScript中的function写法通常是这样的:
<script type="text/javascript"> function myfunction(){ alert("Hello World!"); } myfunction(); </script>
这种方法叫“定义式”。我们知道,function应该也是一种变量,我们可以用通用的“变量式”来进行定义:
<script type="text/javascript"> var myfunction = function(){ alert("Hello World!"); } myfunction(); </script>
既然是变量,我们就给function进行赋值:
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>JavaScript的定义</title> </head> <body> <script type="text/javascript"> var myfunction = function(){ alert("Hello World!"); } myfunction(); var myfunction = function(){ alert("我继续Hello!"); } myfunction(); </script> </body> </html>
提示:你可以先修改部分代码再运行。
输出结果和我们预料的一样:两次打印都是我们所给定的不同的值;
接下来用“定义式”进行赋值:
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>JavaScript的定义</title> </head> <body> <script type="text/javascript"> function myfunction(){ alert("Hello World!"); } myfunction(); function myfunction(){ alert("我继续Hello!"); } myfunction(); </script> </body> </html>
提示:你可以先修改部分代码再运行。
这次你会惊奇的发现:两次输出的结果竟然相同,都是最后一次的赋值,这是为什么呢?难道有错误吗??
难道是因为两次函数名相同?这不应该呀,虽然在其他编程语言中这是非法的,但在JavaScript中,这个可以有。那为什么两次输出的值都相同呢?
再往下看,答案在这里:
原来,JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码。也就是说,在第一次调用myfunction之前,第一个函数语句定义的代码逻辑,已被第二个函数定义语句覆盖了。所以,两次都调用都是执行最后一个函数逻辑了。
这似乎有点象静态语言的编译概念。所以,这一特征也被有些人称为:JavaScript的“预编译”。
大多数情况下,我们也没有必要去纠缠这些细节问题。只要你记住一点:JavaScript里的代码也是一种数据,同样可以被任意赋值和修改的,而它的值就是代码的逻辑。只是,与一般数据不同的是,函数是可以被调用执行的。
最后俺要补充的,这两种不同的定义方法,也可能会引发闭包的。至于谈到闭包?杂家可不敢多讲,这里有曾哥曾经在交流会上分享的《闭包应用实例》,有兴趣的朋友可以去研究,然后分享与大家。
- javascript预编译
- javascript预编译
- javascript之预编译
- javaScript的预编译
- javascript 预编译
- Javascript之预编译
- JavaScript的预编译
- Javascript“预编译”理解
- JavaScript之预编译
- javascript 预编译 作用域
- Javascript预编译和处理
- Javascript的"预编译"思考
- javascript预编译+例题分析
- JavaScript预编译原理分析
- javascript中的预编译问题
- JavaScript预编译过程理解
- 4.JavaScript的预编译
- Javascript预编译和执行过程
- 2012.07.11
- Android 通过手说tts中文语音包实现中文朗读
- 树形结构的数据库表Schema设计
- JDBC学习笔记之dml语句(PreparedStatement&Statement)
- QT整理
- javascript预编译
- for the love,for the dream
- vmware 8.0.3 tools install
- Git入门教程
- apache2 服务器搭建 二级域名虚拟主机搭建
- jQueryのイベントをチュートリアルで学ぶ(前編)
- 0711
- win8 使用笔记
- Android VideoView如何播放RTSP的流