posts - 82, comments - 269, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

JS中可以先使用函数,然后再定义.

Posted on 2007-10-29 19:13 itspy 阅读(2420) 评论(8)  编辑  收藏

  首先要说明的,下面这种方式是对的,虽然不知道为什么,很奇怪为什么可以先使用,再定义,希望有了解的人可以给个说法.
    <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>


评论

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-10-29 22:08 by aisdf
很简单...解析的时候JS是先读函数和定义,再调用的....

# re: JS中可以先使用函数,然后再定义.[未登录]  回复  更多评论   

2007-10-29 23:08 by GoKu
很多语言可以这样...有什么奇怪

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-10-30 08:44 by itspy
@aisdf
<SCRIPT LANGUAGE="JavaScript">

hello('www.openj.cn');
var hello = function(name){alert("hello "+name)};

</SCRIPT>

这种方式为什么不行?

很简单...解析的时候JS是先读函数和定义,再调用的....
这种说话有官方依据吗?

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-10-30 10:08 by genjuro
使用function operator可以定义一个Function对象
function hello(name){alert("hello " +name)};
这种方式定义了一个名为hello的Function对象
function(name){alert("hello "+name)};
这种方式定义的是一个匿名的Function对象,如果不先赋值给一个变量是无法使用的

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-10-30 23:11 by aisdf
第一个里面定义hello是函数....

后面一个可以认为hello为一个变量

先读函数,再变量和调用

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-10-31 11:09 by itspy
做完这个实验,我也能猜测到这些结果,但我希望有人能有一个官方的说法,而不是推论与猜测

最好是一个官方的链接什么的.....

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-10-31 16:00 by wushy
javascript执行时,先预编译,再解释执行.
预编译过程:
首先为执行环境建立建立一个全局对象,一般客户端脚本为window或global对象。
  然后,检查某环境中根代码块中(非函数或{}中)var关键字,把这些变量设置成global对象的属性,并附初值undefined.
如果过程中遇到直接定义的函数(fun1的定义),那么把fun1设置成global对象的属性,并附初值函数的定义.
接下来才是解释执行过程,也就是页面上的js的顺序执行过程.

var hello = function(){...},在解释执行过程才会把函数指针赋值给hello,在它之前hello是undefined.
而function hello(){...}定义的之所以可以,因为它是在预编译过程中,已经定义了hello这个变量.

# re: JS中可以先使用函数,然后再定义.  回复  更多评论   

2007-11-02 15:58 by itspy
谢谢楼上的.

抛了个砖头终于引了个玉来了.

http://www.blogjava.net/zkjbeyond/archive/2006/04/06/39514.html

只有注册用户登录后才能发表评论。


网站导航: