js中,(function(){})()的用法解析
经常用,今天总结一下,下文摘自某网友的总结:
(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(){})()的用法解析的更多相关文章
- 熟练掌握js中this的用法,解析this在不同应用场景的作用
由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式. JavaScript 中函数的调用有以下几种方式:作 ...
- [转载]js中return的用法
一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return; 在大多数情况下,为事件处理函 ...
- [JavaScript] JS中对Base64的解析
JS中对Base64的解析 <script type="text/javascript"> /** * UTF16和UTF8转换对照表 * U+00000000 – U ...
- JS中event.keyCode用法及keyCode对…
js中event.keyCode用法及keyCode对照表 标签: javascriptJavaScriptJavascriptjavaScript 2012-12-11 15:11 HTML Jav ...
- 浅谈JS中 reduce() 的用法
过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...
- JS中 reduce() 的用法
过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它.事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce ...
- js中this的用法
经过近几周的模拟面试题,我查询了一些资料,今天就来说说,在js中this的用法吧.方法有四:第一,用作全局变量,第二,用作表该对象,第三,用作构造函数,第四,用作call和applay
- JQuery之append和appendTo的区别,还有js中的appendChild用法
JQuery之append和appendTo的区别 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插入的元素内容且为Jquery对象,而后面是要选择的 ...
- js中function的与众不同
js中function的与众不同在于可以被调用
- MATLAB中冒号的用法解析
MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: ...
随机推荐
- Heibernate 入门笔记(一)---第一个demo
最近在学heibernate,是看马士兵老师的视频学的,在这里总结一下,做点笔记.关于heibernate的优点,大家可以在网上 百度,这里不做赘述,直接讲怎么使用heibernate 步骤一:新建项 ...
- HIPO图
HIPO图(Hierarchy Plus Input/Processing/Output)是表示软件结构的一种图形工具.以模块分解的层次性以及模块内部输入.处理.输出三大基本部分为基础建立的.它由两部 ...
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...
- earlysuspend调用过程
1. 电源管理的状态 Android的Linux内核为系统提供了4种电源状态,内核的源码为当中的3种定义了名字和相应的宏定义,名字定义在kernel/power/suspend.c中: constch ...
- Java SE学习之数组——匿名数组和不规则数组
本文是学习网络上的文章时的总结以及自己的一点实践.感谢大家无私的分享. 近期偶然遇到了数组的问题,学习了匿名数组和不规则数组. 匿名数组适用于仅仅使用一次的情况:不规则数组适用是每行数据总数不确定的情 ...
- BZOJ 3236 AHOI 2013 作业 莫队算法
题目大意:给出一些数,问在一个区间中不同的数值有多少种,和在一个区间中不同的数值有多少个. 思路:因为没有改动,所以就想到了莫队算法.然后我写了5K+的曼哈顿距离最小生成树,然后果断T了.(100s的 ...
- UVa 11587 - Brick Game
称号:背景:brick game有N块,给你一个整数的定数S,两个人轮流木: 的木块数是集合S中存在的随意数字.取走最后木块的人获胜.无法取则对方获胜. 题干:如今让你先取,给你一个你的结果序列串T, ...
- JVM学习(1)——通过实例总结Java虚拟机的运行机制(转)
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: JVM的历史 JVM的运行流程简介 JVM的组成(基于 Java 7) JVM调优参数:-Xmx和-Xms ...
- ASP.NET跨平台
ASP.NET跨平台最佳实践 前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语 ...
- SharePoint 2013 创建一个搜索中心和搜索设置
这篇文章不是太多深奥的东西,只是一个简单的搜索配置,假设你已经有了,请跳过这篇文章. 行,输入信息,大家都知道,搜索SharePoint一个主要特征.下列,我们在搜索中心创建个人资料. 1.创建Sea ...