立即执行函数

立即执行函数

ID:41679125

大小:85.30 KB

页数:3页

时间:2019-08-29

立即执行函数_第1页
立即执行函数_第2页
立即执行函数_第3页
资源描述:

《立即执行函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、barmer87DenGo.orgjavascript立即执行函数写立即执行函数说明javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解。(function(){..・})()和(function(){...}())是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此。要理解立即执行函数,需要

2、先理解一些函数的基本概念。函数声明、函数表达式、匿名函数函数声明:functionfnName(){...};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。函数表达式varfnName二function(){..・};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。匿名函数:function(){};使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予

3、一个事件则成为事件处理程序或创建闭包等等。函数声明和函数表达式不同Z处在于,一、Javascript引擎在解析javascript代码时会'函数声明提升,(FunctiondeclarationHoisting)当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式,二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用。以下是两者差别的两个例子。23468fnName();functionfnName(){•••//正常,因为,提

4、升,了函数声明,函数调用可在函数声明之前fnName();varfnName=function(){•••}//报错,变里fnNam己还未保存对函数的引用,函数调用必须在函数表达式之后varfnName=function(){alert(1HelloWorld1);/&*达式后面加括号,当jagscript引擎解析到此处时能立即调用函数functionfnName(){alert(1HelloWorld1);//术会抿错,但是javascript引擎只解析函数声明,忽略后面的括号,函数声明不会被调用function(){console.log(1

5、HelloWorld');芳當法错误,虽然匿名函数属于函数表达式,但是未进行哦值燥作,//所^javascript?!^将开头的function关键宇当做函数声明,抿错:要求靈要一个函数名1234567891012131415(functio门(a){console.log(a);>)(123);(function(a){console.log(a);>(1234));!function(a){console>log(a);)(12345);+function(a){console>log(a);)(123456);-function(a){co

6、nsole.log(a);>(1234567);19varfn=function(a){console•log(a);>(12345678)//firebug^j出12亠使用()运算符//firebug^j出12?4,使用()运算符//firebug^出12245「使用!运算符//firebug^出12?456»使用+运算符//firebug^j出12^4567「使用■运算符//firebug^j出12245678,使用二运算符在理解了一些函数基本概念后,回头看看(function(){...})()和(function(){...}())这两种

7、立即执行函数的写法,最初我以为是一个括号包裹匿名函数,并后面加个括号立即调用函数,当时不知道为什么要加括号,后来明口,要在函数体后而加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明。可以看到输岀结果,在function前面加!、+、•甚至是逗号等到都可以起到函数定义后立即执行的效果,而()、、+、・、二等运算符,都将函数声明转换成函数表达式,消除了javascript引擎识别函数表达式和函数声明的歧义,告诉javascript引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。加括号是最安全的做法,因为!、

8、+、■等运算符还会和函数的返回值进行运算,有时造成不必要的麻烦。不过这样的写法有什么用呢?javascript+没用私有作用域的概念,如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。