`
delino
  • 浏览: 8503 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

这个东西很疑惑

阅读更多
我一直很疑惑,javascript

的这个东西:

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


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


还有一个问题就是

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


以及这里最后的那个括号是什么意思呢?
  • 大小: 3.9 KB
分享到:
评论
3 楼 RednaxelaFX 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
1 楼 liujunsong 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解释器,会如何来分析这段代码.

上板砖.

相关推荐

    疑惑地带皮肤for dvbbs7.0

    老鸟就不要看了,会觉得烦的) ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ●一、先把压缩包里的所有东西解压之后全部放入skins文件夹内,Dv_skin.mdb为皮肤数据库....

    专用SK6211_2008_BA汉化版量产工具

    20080430_BA汉化版这个版本的量产工具,我曾用过最新版本工具去量产我的U盘,量产成启动盘的时候,U盘没问题,但是当我用这个最新版本的工具恢复U盘的时候,却出现参数不对的错误,无法从U盘复制东西到电脑,U盘也...

    五子棋java代码

    因为我们做一个项目的时候,要写很多类的,类和类之间又有很多关系,如果知道了一些条件是固定的话,那么我们可以让所有的类继承这个接口,那么岂不是方便了很多,我们想想五子棋哪些条件是固定的,首先我们要存棋子...

    二年级语文上册 第一次买东西教案 长春版-长春版小学二年级上册语文教案.doc

    对于一些高频字,如“和”,可以让学生用这个词造句,加深理解。 写字指导是教学的重点,需关注每个字的结构和书写规则。例如,“态”字要注意“心字底”的写法,“度”字中间应与“草字头”区分开,“害”字中间是...

    websocket源码

    这里先解答一个疑惑,为啥我们这要用WebSocket而不是Socket呢,因为WebSocket是一个应用层协议很多东西都规定好了我们直接按他的规定来用就好,而Socket是传输层和应用层的一个抽象层很多东西我们还得自己规定相对来说...

    《皇帝的新装》短文阅读答案.docx

    《皇帝的新装》这篇短文出自丹麦作家安徒生的经典童话故事,主要讲述了皇帝被两个骗子欺骗,穿上“看不见”的新装,在公众面前炫耀,最终被一个小孩揭示真相的故事。这个故事富含深意,寓教于乐,让我们来详细探讨...

    变色龙引导工具

    楼主这东西bug很多,首先硬盘上的系统不一定都在c盘,而且有的是双硬盘,楼主这东西默认放在c盘,有问题,这个我就遇到了,另外用时空淘气包的套件做的这个东西,本身在用了模拟破解的vista上不能用,变色引导我也做...

    AI Agent智能应用从0到1定制开发12章

    有很多人或许会疑惑,Agent这个东西看起来跟LLM也没差得那么远,那为啥最近突然Agent那么火,而不称之为LLM-Application或者其他的词呢?这就得从agent的来历上说起了。 从哲学意义上讲,“Agent”是指具有意图和...

    Navicat导入sql报错[Err] 1046 – No database selected

    我很疑惑地又导了几次。当然又全都失败. 错误造成原因: ​ 直接在连接位置上右击选择了运行sql文件 解决方法: ​ 第一步:连接位置右键新建一个数据库,名字跟要导入的数据库名字相同 ​ 第二步:在数据库位置...

    数字逻与电路辑复习题答案

    数字信号使用二进制的0和1来表示状态,这使得数字逻辑成为数字系统的基础。常见的编码系统包括二进制、八进制和十六进制,还有如8421BCD码、格雷码等特殊编码。 - **判断题**提到了格雷码的循环特性,使其在传输...

    编程最需要的东西--帮助文档

    标题中的“编程最需要的东西--帮助文档”强调了这一点,指出编程过程中,高质量的帮助文档就如同一位无声的导师,随时解答疑惑,引领我们正确地进行代码编写。 描述中提到了几本关于编程的书籍,例如“手机游戏开发...

    7奇怪的大石头_课件.ppt

    第四纪是地质历史的最后一个阶段,大约从250万年前持续至今,这个时期地球上很多地方都经历了多次冰川活动,包括在中国的秦岭地区。 秦岭,位于中国的中部,是一条东西走向的古老山脉,也是地理上的南北分界线。在...

    no-OS-master.zip

    同时,对于如何"快速下载东西"的疑惑,可能是指使用P2P下载工具、种子服务或者设置代理服务器来提高下载速度。 根据"no-OS-master"这个文件名,我们可以猜测这可能是一个开源项目的主分支源代码。在软件开发中,...

    十天学会ASP系列文章

    难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个...

    十天学会ASP.NET

    难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个...

    十天学会ASP.NET教程

    难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个...

    10天学会ASP.NET教程

    难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个...

    ASP.NET基础入门教程-自学必备

    难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个...

Global site tag (gtag.js) - Google Analytics