浏览 1572 次
锁定老帖子 主题:这个东西很疑惑
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-02
的这个东西: (function(){ // js code })(); 很不明白。。。这个到底是什么意思呢? 是吧这个里面的方法 都封装吗?让这里的函数,变量都不被外面的JS 所使用到吗? 还有一个问题就是 (function( /* 1.这里传的参数 */ ){ // js code })( /* 2.这里传的参数 */ ); 以及这里最后的那个括号是什么意思呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-02
我来尝试回答一下了.
从解释器的角度来看,js解释器是这样理解上面的代码的. 输入如此: (function(){ // js code })(); 解释器翻译成: function temp1(){ // js code ,原来的js代码照搬过来 } new temp1(); 最后返回一个按照js定义代码定义的function对象,或者数据类型出来 同理,下面的代码输入如此: (function( /* 1.这里传的参数 */ ){ // js code })( /* 2.这里传的参数 */ ); 解释器翻译成: function temp2( /* 1.这里传的参数 */ ){ // js code ,原来的js代码照搬过来,定义一个临时的temp2出来 } new temp2( /* 2.这里传的参数 */ ); ) //然后调用这个function,传递参数进去,返回一个function 自己理解应该是这个样子的了。 其实看到一段比较奇怪的代码,不妨问问自己,如果是自己写的Js解释器,会如何来分析这段代码. 上板砖. |
|
返回顶楼 | |
发表时间:2009-05-03
|
|
返回顶楼 | |
发表时间:2009-05-03
liujunsong 写道 我来尝试回答一下了.
从解释器的角度来看,js解释器是这样理解上面的代码的. 输入如此: (function(){ // js code })(); 解释器翻译成: function temp1(){ // js code ,原来的js代码照搬过来 } new temp1(); 最后返回一个按照js定义代码定义的function对象,或者数据类型出来 别误导新人啊,那段代码要说概念上的翻译也是翻译为类似: function temp() { // ... } temp() 或者说 var temp = function() { // ... } temp() 也就是直接定义一个函数表达式,然后立即调用它。 楼主可以仔细学习一下JavaScript的语法,例如参考MDC上的JavaScript文档,留意定义函数的三种方式:1)函数语句;2)函数表达式;3)Function构造函数。 (function() { // ... })() 这个拆开来看,首先是: function() { // ... } 这就是一个匿名的函数表达式,function关键字后的括号里的是形式参数列表。 然后把这个表达式用括号包起来,后面再跟一对括号,这后一对括号就是对前面的函数的调用,括号里的是实际参数列表。 因为JavaScript唯一的局部作用域就是函数作用域,所以如果要在一个函数里再创建局部作用域的话,就得使用嵌套函数了。类似的问题在问答频道有很多人问过,可以参考一下,例如http://www.iteye.com/problems/8709 |
|
返回顶楼 | |