(function($){...})(jQuery)  含义

经常用,今天总结一下,下文摘自某网友的总结:

(function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下看。

这里实际上是匿名函数 function(arg){...} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){...})(param) 这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数 而(function($){...})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery var fn = function($){....}; fn(jQuery);

(funtion(){})();立即执行函数;相当于先申明一个函数,声明完后直接调用;如果参数如:
(funtion(str){alert(str)})("output"));相当于:funtion OutPutFun(str){alert(str);};OutPutFun("output");

最近在整理

javascript

学习,发现这个问题了

,在网上发现这么个解释

最清

最明白

(function(){})()

相当于先定义

function xx(){}

,后调用

xx();

()

是最高优先级的,所以先执行

function(){}

这个定义了一个匿名函数,等于

xx=function(){}

接着就是调用

xx()

;

给个例子

JScript code

functionf1(a)

{

alert(a);

}

functionf2(a)

{

returnfunction(){

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()

{

)();

最外面的这两行,

有什么用啊?

J

Script code

YY=YY||{};

//---

声明一个叫

YY

的命名空间(定义一个全局的变量)

//(

function()

{

YY.Lang=function()

{

//------

声明一个叫

YY.Lang

的命名空间

(通过全局变量的增加属性的方式把闭包里的对象传

到全局变量中,实现代码封装的效果)

isUndefined:function(o)

{returntypeofo==='undefi

ned';

},

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);

js中,(function(){})()的用法解析的更多相关文章

  1. 熟练掌握js中this的用法,解析this在不同应用场景的作用

    由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式. JavaScript 中函数的调用有以下几种方式:作 ...

  2. [转载]js中return的用法

    一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return;  在大多数情况下,为事件处理函 ...

  3. [JavaScript] JS中对Base64的解析

    JS中对Base64的解析 <script type="text/javascript"> /** * UTF16和UTF8转换对照表 * U+00000000 – U ...

  4. JS中event.keyCode用法及keyCode对…

    js中event.keyCode用法及keyCode对照表 标签: javascriptJavaScriptJavascriptjavaScript 2012-12-11 15:11 HTML Jav ...

  5. 浅谈JS中 reduce() 的用法

    过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...

  6. JS中 reduce() 的用法

    过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...

  7. js中this的用法

    经过近几周的模拟面试题,我查询了一些资料,今天就来说说,在js中this的用法吧.方法有四:第一,用作全局变量,第二,用作表该对象,第三,用作构造函数,第四,用作call和applay

  8. JQuery之append和appendTo的区别,还有js中的appendChild用法

    JQuery之append和appendTo的区别 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插入的元素内容且为Jquery对象,而后面是要选择的 ...

  9. js中function的与众不同

    js中function的与众不同在于可以被调用

  10. MATLAB中冒号的用法解析

    MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: ...

随机推荐

  1. BZOJ 2007 NOI2010 海拔高度 最小减产计划

    标题效果:YT城市是一个精心规划的城市.这个城市是东西向和南北向干道成n×n地区性.简单.可以YT作为一个城市广场,每个区域也可被视为一个正方形.因此,.YT市中含有(n+1)×(n+1)交叉口和2n ...

  2. GUI (图形界面)知识点

    一:组件知识点 JTextField:    作用:  定义文本域,只支持单行输入.                使用:  定义文本域:  JTextField jtf=new JTextField ...

  3. 利用Eclipse中的Maven构建Web项目(三)

    利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...

  4. 可以部署在广域网执行QQ高仿版 GG2014 (源代码)

      距上次GG V3.7版本号(可在广域网部署执行的QQ高仿版 -- GG叽叽V3.7.优化视频聊天.控制很多其它相关细节)的公布.已经有50天了,这50天对于GG来说.是一个重大的飞跃. 由于这段时 ...

  5. MaidSafe.net,一个完全去中心的化的云存储系统

    MaidSafe.net,一个完全去中心的化的云存储系统 (类似Bitcloud系统) 本帖最后由 tbit 于 2014-3-26 16:11 编辑 已经开发了8年,最近即将推出测试和IPO.开放源 ...

  6. ssh远程登录报错REMOTE HOST IDENTIFICATION HAS CHANGED!解决方式及原因

    注意,文档中的ip和指纹已经替换为了ip.ip.ip.ip 和aa:... ,以免引起不必要的误会. icode@test:~/lab/dir/sadf$ ssh remote_name@ip.ip. ...

  7. “MEAN”技术栈开发web应用

    “MEAN”技术栈开发web应用 上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在no ...

  8. 探秘Java虚拟机——内存管理与垃圾回收(转)

    本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索. 1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始 ...

  9. StackExchange.Redis 使用-发布订阅 (二)

    使用Redis的发布订阅功能 redis另一个常见的用途是发布订阅功能 . 它非常的简单 ,当连接失败时 ConnectionMultiplexer 会自动重新进行订阅 . ISubscriber s ...

  10. SQLHlper意识

    经过学习,通过线敲登录的三个例子,敲四行CRUD样品,因此,访问数据库多次,在这些链接库.打开都一样.只是不同的操作将针对不同的表进行.始学习面向对象的思想.当让要对这些不变的要内容要进行打包,提高代 ...