js 预编译做了哪些工作呢?
来源:互联网 发布:宋家三姐妹知乎 编辑:程序博客网 时间:2024/05/21 11:29
首先要说明的,下面这种方式是对的,虽然不知道为什么,很奇怪为什么可以先使用,再定义,希望有了解的人可以给个说法.
<SCRIPT LANGUAGE="JavaScript">
hello('www.openj.cn');
function hello(name){alert("hello " +name)};
</SCRIPT>
本文首发于 http://blog.openj.cn
下面的这种定义函数方式,对于写一些比较复杂的代码比较合适,特别是有返回值时,函数名可以直接被赋予返回值,有时这会带来很大的方便.
<SCRIPT LANGUAGE="JavaScript">
var hello = function(name){alert("hello "+name)};
hello('www.openj.cn');
</SCRIPT>
下面这种方式是错的,在此处不能先使用后定义,可能是因为函数名此时也当做变量名吧.对变量无法实现先使用后定义.这只是猜测,希望有明白人能给一个权威说话.
<SCRIPT LANGUAGE="JavaScript">
hello('www.openj.cn');
var hello = function(name){alert("hello "+name)};
</SCRIPT>
预编译过程:
首先为执行环境建立建立一个全局对象,一般客户端脚本为window或global对象。
然后,检查某环境中根代码块中(非函数或{}中)var关键字,把这些变量设置成global对象的属性,并附初值undefined.
如果过程中遇到直接定义的函数(fun1的定义),那么把fun1设置成global对象的属性,并附初值函数的定义.
接下来才是解释执行过程,也就是页面上的js的顺序执行过程.
var hello = function(){...},在解释执行过程才会把函数指针赋值给hello,在它之前hello是undefined.
而function hello(){...}定义的之所以可以,因为它是在预编译过程中,已经定义了hello这个变量.
var theName = (function(){
var _surname = function(){return "xiong";
},
_name = function(){
return "zhengxiang";
};
console.log(theName.getSurname());
return {
getSurname : _surname,
getName : _name
}
})();
参考:http://www.blogjava.net/zkjbeyond/archive/2006/04/06/39514.html
http://www.blogjava.net/itspy/archive/2007/10/29/156752.html
- js 预编译做了哪些工作呢?
- 电脑开机都做了哪些工作
- 工作一年了,我都做了些什么呢?
- Commit 时系统到底做了哪些工作?
- 输入url,后台都做了哪些工作
- 输入url,后台都做了哪些工作
- 输入url,后台都做了哪些工作
- main函数之前之后做了哪些工作
- [读书笔记]百度在NLP领域做了哪些工作
- 输入url,后台都做了哪些工作
- Sql优化器究竟帮你做了哪些工作?
- 哪些工作需要做
- 现在学习Java语言有什么优势呢,学完后可以做哪些工作?
- js的new运算符做了哪些事情
- ListView可以做哪些事情呢
- Linux疑问-----什么是挂载 ??? 挂载都完成了哪些工作???内核做了什么???
- pthread_mutex_init做了什么呢?
- 丨做文员的工作丨笔记本文件丢了如何恢复呢
- iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理
- WeakReference 和 SoftReference
- 下一代 Linux 文件系统:NiLFS(2) 和 exofs
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- js 预编译做了哪些工作呢?
- cocos2d cut the rope
- 动态库和静态库的区别及使用
- StudyFOR
- javascript定义对象写法
- IIS 6.0 上传下载数据限制相关
- iPhone/Mac Objective-C内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
- 性能测试出现FileNotFoundException: Too many open files的异常原因
- kubuntu root 登陆