最近在整理javascript 学习,发现这个问题了 ,在网上发现这么个解释 最清楚 最明白 ; 
(function(){})() 
相当于先定义 function xx(){},后调用 xx(); ()是最高优先级的,所以先执行function(){}, 这个定义了一个匿名函数,等于xx=function(){} 接着就是调用xx()了; 给个例子 
JScript code

function f1(a){
alert(a);
}
function f2(a) {
return function(){
alert(a);
}
}

这里的var x=f2 就等于把函数传递给了f2,然后要执行这个函数,就必须加() 也就是x(); 也就是f2()   
还是

(function f2(a){
return function(){
alert(a);
})();

另外还有一个问题 就是命名空间的问题

YY = YY||{};---声明一个叫YY的命名空间(定义一个全局的变量) (function() {
YY.Lang=function() {------声明一个叫YY.Lang的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果) isUndefined: function(o) {
return typeof o === 'undefined'; },
isString: function(o) {
return typeof o === 'string'; } };
})();
---调用方法
alert(YY.Lang.isString('test me'));

这时候就有人不明了,楼上为什么要加(function() { 和)(); 最外面的这两行,有什么用啊?

JScript code

YY=YY||{}; //---声明一个叫YY的命名空间(定义一个全局的变量)
//(
function() { YY.Lang=function() {
//------声明一个叫YY.Lang的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果) isUndefined:function(o) {returntypeofo==='undefined'; },
isString:function(o) {returntypeofo==='string'; } }; } //)();
//---调用方法
alert(YY.Lang.isString('test me'));

疑问在这:??????
   注释掉这两行有什么不一样的呢?不就是申明吗,为什么要用()()执行一下啊?
答:
(function(){})()意思是立即执行前一个括号里的function,相当于是一个匿名函数;由于里面的代码的执行,定义了YY.Lang这个对象,所以可以执行alert(YY.Lang.isString('test me'));调用isString方法。
但是,如果按照你写的
 
functionaa(){..};//只是定义了一个叫aa的函数,但是并没有执行
alert(YY.Lang.isString('test me'));//执行的时候会报找不到isString的方法。 
这么写有什么好处??????????????
(function{})()的写法有个好处,就是能很好的利用javascript的变量的可见范围为执行脚本时节省空间。例如以下写法1和写法2达到的目的是一样的,但是写法1的由于a变量的可见范围只是在匿名函数体内,所以a在执行完这个匿名函数后就释放空间了。但是写法2会一直存在该页面中。
写法1:
JScript code

(function(){vara=2; alert(a); })();

写法2:
JScript code

vara=2; alert(a);

(function(){})()的用法的更多相关文章

  1. boost::function的用法

    本片文章主要介绍boost::function的用法. boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象. 1.  介绍 Boost.Func ...

  2. boost::bind 和 boost::function 基本用法

    这是一篇介绍bind和function用法的文章,起因是近来读陈硕的文章,提到用bind和function替代继承,于是就熟悉了下bind和function的用法,都是一些网上都有的知识,记录一下,期 ...

  3. c/c++ 重载运算符 标准库function的用法

    重载运算符 标准库function的用法 问题:int(int, int)算不算一种比较通用的类型?? 比如函数: int add(int a, int b); 比如lambda:auto mod = ...

  4. python3新特性函数注释Function Annotations用法分析

    本文分析了python3新特性函数注释Function Annotations用法.分享给大家供大家参考,具体如下: Python 3.X新增加了一个特性(Feature),叫作函数注释 Functi ...

  5. Extjs中renderer:function函数用法

    renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){ } 1.value是当前单元格的值 2.cellme ...

  6. $(function(){})和$(document).ready(function(){}) 的用法

    当文档载入完毕就执行,以下几种效果是等价的:1. $(function(){ //这个就是jQuery ready()的简写,即下2的简写 // do something }); 2. $(docum ...

  7. c++11:function的用法

    function是函数.函数对象.函数指针.和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针 普通函数 #include <functional> voi ...

  8. js中,(function(){})()的用法解析

    (function($){...})(jQuery)  含义 经常用,今天总结一下,下文摘自某网友的总结: (function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下 ...

  9. ECharts中color : function的用法(转)

    ECharts图表实战经验1:如何设置图表同序列不同数据点的独立颜色值   最近有不少朋友在追问这样一个问题:我单序列的柱状图,我想让每一个根柱子的颜色都不一样,应该如何做? 针对这个问题,其实我只想 ...

随机推荐

  1. .Net Attribute特性

    1.什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标 ...

  2. bootstrap的select2校验及不影响原来的格式

    <style> .has-error .select2-choice, .has-error .select2-choices, .has-error.simple .select2-ch ...

  3. win平台检查内存泄露

    int main() { _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); _CrtSetBre ...

  4. 集群ssh服务和免密码登录的配置

    安装Hadoop之前,由于集群中大量主机进行分布式计算需要相互进行数据通信,服务器之间的连接需要通过ssh来进行,所以要安装ssh服务,默认情况下通过ssh登录服务器需要输入用户名和密码进行连接,如果 ...

  5. 项目总结(二)--- CocoaPods的简单介绍与使用

    先谈下,我们为什么要使用CocoaPods,它能为我们做什么吧. 所有开发过iOS应用的小伙伴们都知道,在整个项目中,第三方库的引用必不可少(特别感谢那些优秀第三方开源库的作者,给我们提供了多大的便捷 ...

  6. UITableView:下拉刷新和上拉加载更多

    [转载请注明出处] 本文将说明让UIScrollView支持"下拉刷新"和"上拉加载更多"的实现机制,并实现一个可用的tableView子类,以下主要以&quo ...

  7. 决策树之C4.5算法

    决策树之C4.5算法 一.C4.5算法概述 C4.5算法是最常用的决策树算法,因为它继承了ID3算法的所有优点并对ID3算法进行了改进和补充. 改进有如下几个要点: 用信息增益率来选择属性,克服了ID ...

  8. 【解决】 新浪sae固定链接404 问题

    固定链接404 固定链接是一个很重要的内容,wordpress默认的链接很复杂,也不利于搜索引擎搜索.wordpress也提供修改固定链接的功能,在设置里面[固定链接]修改. 但是,使用新浪sae的小 ...

  9. 前端代理nproxy

    一.场景/用途 前端代理的用途,相信大家都清楚.应用场景很多,如—— . 将线上的静态资源文件(JS.CSS.图片)替换为本地相应的文件,来调试线上(代码都被压缩过)的问题: . 本地开发过程,当后端 ...

  10. 分类and分类延展

    1.Category简介 Category,又称为类别&类目&分类,是OC特有语法,在不修改原有类的基础上增加新的方法,一个庞大的类可以多人来分模块开发,有助于团队合作,或者对当前类方 ...