`
delino
  • 浏览: 8201 次
  • 性别: 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解释器,会如何来分析这段代码.

上板砖.

相关推荐

    SQL Server系统提供功能的三个疑惑

     近来工作之余一直在系统地学习和研究SQL Server 数据库引擎这一整块,发现了一些原来没有太注意的东西,感觉SQL Server 光数据库引擎这块有很多要学习和研究的。我个人觉得SQL Server提供的功能除了bug(可以通过...

    疑惑地带皮肤for dvbbs7.0

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

    一文扫清对 JavaScript 中的疑惑

    一文扫清对 JavaScript 中的疑惑 文章目录一文扫清对 ... EC(Execution Context)【执行环境 / 执行上下文】 和 Scope【作用域】 是一个东西吗 ? 如果不是区别在哪 ?4. 什么是词法作用域 ? 和作用域有什么关系 ?5. VO

    专用SK6211_2008_BA汉化版量产工具

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

    五子棋java代码

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

    51资料很好用的,自己开发的,符合大众的口味,爱下不下

    “登陆这个网站就为了下个东西还不知道值不值,真可悲啊”表达了一种对网络资源价值的认知和疑惑,可能意味着用户在下载资源时会权衡其价值,也反映出当前网络资源的丰富性与选择难度。 【标签】“山大”再次确认了...

    3人工智能论文.docx

    人工智能是个很宽泛的话题。从手机上的计算器到无人驾驶汽车,到未来可能改变世界的重大变革,人工智能可以用来描述很多东西,所以人们会有疑惑。 3.我们日常生活中已经每天都在使用人工智能了,只是我们没意识到...

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

    这个是 数字逻辑与电路的复习题答案 免费送给大家 记得要跟 那个 数字逻辑与电路复习题 一起下载 不然上面只有习题没有答案

    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文件 解决方法: ​ 第一步:连接位置右键新建一个数据库,名字跟要导入的数据库名字相同 ​ 第二步:在数据库位置...

    C语言也能干大事全部板书(带书签)

    很多同学学了C语言之后,可能难免会有所感叹:这就是C语言!总是感觉C语言竟然能写出Windows、Linux?为了解除同学们 的疑惑,也愿为同学们指点编程之道吧。我写的这些东西采用C语言,计划通过编程实例来讲解C编程...

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

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

    C语言到底能干什么(用C写QQ)

    很多同学学了C语言之后,可能难免会有所感叹:这就是C语言!总是感觉C语言竟然能写出Windows、Linux?为了解除同学们的疑惑,也愿为同学们指点编程之道吧。我写的这些东西采用C语言,计划通过编程实例来讲解C编程的...

    c语言socket编程指南

    “但是...”,你可能有很大的疑惑,“如果它是个文件描述符,那么为什么不用一般调用read()和write()来进行套接字通讯?”简单的答案是:“你可以使用!”。详细的答案是:“你可以,但是使用send()和 recv()让你更...

    学习网络编程

    “但是...”,你可能有很大的疑惑,“如果它是个文件描述符,那么为什 么不用一般调用read()和write()来进行套接字通讯?”简单的答案是:“你可以使用!”。详细的答案是:“你可以,但是使用send()和recv()让你更...

    no-OS-master.zip

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

    十天学会asp.net

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

Global site tag (gtag.js) - Google Analytics