以下为总结
在开源的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的一些关键知识点进行详细阐述。 1. **基础概念**:JavaScript是一种解释型、弱类型、...
这里给大家整理汇总了一些javascript的基础函数,都是比较常用和实用的。整理出来也有助于大家更好的理解javascript。 代码如下: [removed] /*创建函数和字面量函数*/ /* function add(){ alert(“函数...
函数表达式和函数声明是JavaScript的两种定义方式,其中匿名函数和箭头函数是常见的写法。 面向对象在JavaScript中表现为基于原型的继承。每个对象都有一个proto(或__proto__)属性,指向创建该对象的构造函数的...
这份"Javascript基础代码整理分享"涵盖了从基础到进阶的多个主题,通过不同的HTML文件,我们可以深入理解JS的核心概念。 1. **数组操作** (arrdemo.html): JS中的数组是一种可变大小的数据结构,可以存储不同类型的...
这篇“JavaScript不就这么回事(Javascript基础知识整理)”文档将深入浅出地介绍JavaScript的核心概念,帮助你全面理解和掌握这一强大的脚本语言。 1. **变量与数据类型**:JavaScript支持动态类型,这意味着你不...
7. **ES6及后续版本的新特性**:如类(class)、模块(import/export)、解构赋值、模板字符串、Set和Map、迭代器和生成器等,这些都是JavaScript不断发展的证据。 8. **错误处理**:包括try/catch语句,以及常见的...
14. **ES6新特性**:包括类(class)、模块(import/export)、模板字符串(`)、解构赋值、let/const、箭头函数、Promise、Generator、Set/Map等。 以上只是JavaScript基础知识的一部分,深入学习还包括错误处理、...
7. **ES6及更新版本的新特性**:例如let和const、解构赋值、类和模块系统,这些都是现代JavaScript开发中的核心部分。 8. **错误处理**:学习如何有效地捕获和处理运行时错误,提升代码的健壮性。 9. **性能优化**...
而`instanceof`则用于判断一个对象是否属于某个类的实例,可以识别更具体的类型。 3. **数组定义**: 在JavaScript中,数组可以通过`new Array()`或方括号`[]`来创建。例如: ```javascript var acolors = new ...
以上就是JavaScript事件机制的兼容性整理,包括添加、移除事件监听器,阻止事件默认行为以及获取事件目标对象的方法。理解并掌握这些兼容性技巧,可以确保你的JavaScript代码在各种浏览器环境中都能正常工作。
本教程是针对初学者精心整理的JavaScript学习资料,旨在帮助读者快速掌握这门语言的基础知识。 JavaScript语法基于ECMAScript规范,最新版本为ECMAScript 2022。其主要特点包括弱类型、动态类型、基于原型的对象、...
【标题】"自己整理的常用js" 涵盖了JavaScript这一编程语言的常用知识点,JavaScript,简称JS,是Web开发中的核心语言,主要用于网页和网络应用的动态化与交互性。这个压缩包包含了作者对JavaScript常用功能和技巧的...
- 函数定义和调用,包括匿名函数和具名函数。 - 变量作用域:局部变量与全局变量的概念和区别。 - 方法:对象的方法和对象字面量。 - 高阶函数:如map、reduce、filter和sort。 - 闭包:一个函数和对其周围状态...
这个"javascript sample"压缩包很可能是开发者或教育者为了教学目的整理的,其中的每个文件可能代表一个特定的JavaScript知识点或技巧。通过学习和实践这些代码,初学者可以加深对JavaScript的理解,熟练掌握其应用...
在这篇文章中,我们可以了解到如何为初学者准备和整理JavaScript的学习材料,以及一些基础教程的内容。文章被分为了九个部分,每个部分都有专门的内容,适合初学者循序渐进地学习。接下来将详细介绍这些部分的知识点...
在进行JavaScript编程的过程中,有一些基础且非常实用的函数会频繁地被使用,本文将对这些常用函数进行归纳整理,并对它们的用法和特点进行详细说明。以下是对JavaScript中一些常用函数的总结,这些内容对初学者和...
想起自己很久以前学习javascript的经历,也曾经碰到过几个由匿名函数造成的困扰(其中一个就是由闭包引起的),下面就整理几段简单代码讨论一下,让我们大家一起进步。
"js课后及试题整理.zip"这个压缩包文件显然是一个专门针对JavaScript学习者提供的资源集合,包含了课后习题和测试题目,帮助学生巩固和提升JavaScript编程技能。 首先,我们来探讨一下JavaScript的基础知识点: 1....