论坛首页 入门技术论坛

这个东西很疑惑

浏览 1572 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-05-02  
我一直很疑惑,javascript

的这个东西:

(function(){
   // js code
})();


很不明白。。。这个到底是什么意思呢?
是吧这个里面的方法 都封装吗?让这里的函数,变量都不被外面的JS 所使用到吗?


还有一个问题就是

(function( /* 1.这里传的参数 */ ){
   // js code
})( /* 2.这里传的参数 */ );


以及这里最后的那个括号是什么意思呢?
  • 大小: 3.9 KB
   发表时间: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解释器,会如何来分析这段代码.

上板砖.
0 请登录后投票
   发表时间:2009-05-03  
http://www.google.com/search?q=javaScript+%E5%8C%BF%E5%90%8D%E5%87%BD%E6%95%B0&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:zh-CN:official&client=firefox-a
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics