以下为总结
在开源的JavaScript框架中能看到很多这样语法结构
(function(){
}
)()
比如我最近看的jQuery,及chediter。刚开始的时候我看到这样的结果有点奇怪,它是怎么执行的,并且这是什么样的语法结构,最近偶尔看闭包的时候,才发现原来这是JavaScript种匿名函数(看到这个有点汗,java的匿名类见过,就从来没想到JavaScript中会有匿名函数,也是学的不够牢固)。
现在我们了解到以上是JavaScript匿名函数的语法结构,怎么声明函数,匿名函数JavaScript是怎么执行的,匿名函数的代码模式。这些问题
就是我们接下来要探讨的问题。
第一:怎么声明函数。
方法一 function functionName( arguments ){ body }
在JavaScript函数典型函数,也叫有名函数(因为它存在functionName)。
function fun(){ alert( "test" ) }// 1
fun();//2
第1行这是JavaScript声明有名函数最常见的方法,也是我们个人开发中最常用的声明方式。
该语法结构为声明一个名叫fun的函数(注意JavaScript只会编译该函数,并生成fun函数的对象,不会执行该函数)。
而第二句为调用该函数即执行该函数。
方法二 var fun = function ( arguments ){ body } //又称函数字面量
var fun = function( ){ alert( "test" ) }
该函数复制给变量fun,其实后面的函数为一个匿名函数
方法三 var fun=new Function([arguments], Body);
将函数复制给变量fun
注意该种方式会存在性能问题,在执行 new Function方法时它不是静态编译和执行,而是动态编译和执行,即当执行new Function时才编译函数主体,并生成函数对象,每调用一次就执行编译及执行的过程【类似于函数eval()】,它比其他方是多了编译过程【会使用浏览器的编译器
】,如果再循环体中执行效率会比较低;上面三种定义函数方式中,后两种方式是采用匿名函数的方式什么的变量。
第二:匿名函数是怎样执行的。
对于语法结构
(function(){
alert( "test" );
}
)()
其实是由两部分组成
(function(){
alert( "test" );
}
)表示的为匿名函数的定义。
而对于接在后面的"()"代表的意思为执行定义的匿名函数。
上述的语法结构也等价于以下的语法结构
var test=function(){
alert( "test" );
//函数内容
};//声明匿名类并将匿名函数赋予变量test。
test();//执行test
可以看出匿名类可以直接在类后面接()代表执行,这也是我们在jQuery等开源的框架时,导入相应的包以后就可以直接使用对象的原因。它已经在匿名函数中完成相应的初始化及封装。
知道匿名类是怎么执行的,那我们常用的匿名函数有哪些呢。
第三:匿名函数调的代码模式
hedger wang介绍了几种匿名函数的代码模式:
错误模式:其无法工作,浏览器会报语法错。
function(){
alert(1);
}();
以上错误原因是()能更改表达式的优先级,使用()后,将先执行()里面的代码,而对于表达式()对于JavaScript编译不过去的。
函数字面量:首先声明一个函数对象,然后执行它。 也称为立即执行函数。
(function(){
alert(1);
} ) ( );
编译一定能通过,第一()是函数定义,而第二个()代表执行第一括号里面的内容
优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。
( function(){
alert(1);
} ( ) );
Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。
void function(){
alert(1);
}()
这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种以及上面提到的 new Funtion( )的定义方式。
灵活的配合var关键字,匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。也能增加代码的可读写行,减少代码量,提高程序的性能。
分享到:
相关推荐
自己在看书或实践中整理的文档,文档中包括事件对象与匿名函数等问题...
这里给大家整理汇总了一些javascript的基础函数,都是比较常用和实用的。整理出来也有助于大家更好的理解javascript。 代码如下: [removed] /*创建函数和字面量函数*/ /* function add(){ alert(“函数...
想起自己很久以前学习javascript的经历,也曾经碰到过几个由匿名函数造成的困扰(其中一个就是由闭包引起的),下面就整理几段简单代码讨论一下,让我们大家一起进步。
javaScript 逻辑运算符使用技巧整理 下面是返回true的情况 !null //true !undefined //true !0 //true !NaN //true !"" //true 下面是返回false的情况 !Array //false !Function //false !String //false !Object...
现在面试JS程序员很多都是直接上机解决公司提前准备好的Javascript问题,或者干脆直接写在纸上,体现出程序员的思路等,小编为大家整理了最新的JS面试试题以及解决办法和思路,一下来看下。 闭包: function fun(n,...
箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的,只包含一个表达式,连{ … }和return都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ … }和return: x => { if (x >...
该项目可能对基于浏览器的Clojure代码编辑,整理,语法突出显示,自动完成以及在浏览器中运行沙盒化Clojure代码等各种事情很有用。 主要特征 特殊形式 定义 如果 做 让 n 循环/重复 持久数据结构(由mori提供) ...
主要介绍了JavaScript函数学习总结以及相关的编程习惯指南,整理包含到了匿名函数和三元运算符等非常cool的知识点,需要的朋友可以参考下
匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æpli'keiʃәn]' (application crash 程序崩溃) arbitrary a.任意...
Reddit Image Viewer 匿名浏览任何subreddit中的图像和媒体。 发展 :rocket:安装使用来启动并运行Yarn或NPX。 yarn create next-app reddit-image-viewer --example ...
JavaScript let、const、var 的区别有哪些?- var可变量提升,可重复声明,无暂存死区,无块级作用域 自执行函数: var foo = 1 (function foo() { foo = 10 console.log(foo) }()) // -> ƒ foo() { foo = 10 ; ...
06 Python 今日内容整理 第13章 第13章共1课 第14章 01 数据类型和变量总结 02 集合定义和基本操作方法 03 集合关系运算交,差,并集 04 集合的其他内置方法 05 集合补充 06 百分号字符串拼接 07 format字符串...
将照片整理到相册/标签中 日期选择器以查找给定时间段内的照片 快速/轻松上传的“投递箱” 安装 警告,该软件项目使用了许多不常见的要求,因此安装起来可能有些棘手。 观看Leafo的Lapis截屏视频,以熟悉Lapis 其
后面是IDE设备的类型和硬件参数,TYPE用来说明硬盘设备的类型,我们可以选择AUTO、USER、NONE的工作模式,AUTO是由系统自己检测硬盘类型,在系统中存储了1-45类硬盘参数,在使用该设置值时不必再设置其它参数;...