首页 > Javascript匿名函数

Javascript匿名函数

ü  定义

匿名函数的定义非常简单:就是没有名字的函数。但是其用途非常的大

ü  典型的函数定义方式

在看匿名函数之前我们先看下在Javascript中定义一个函数比较典型的几种方式

  1. 函数声明
    function functionName(args) {
    //函数体
    }
  2. 函数表达式
    var functionName = function (args) {//函数体
    }

函数声明与函数表达式的区别:

  1. 函数声明会在任何代码执行以前被加载到作用域
  2. 函数表达式则是在代码执行到那一行的时候才会有定义

例如:

  

那么在函数声明会给函数指定一个名字,而函数表达式则是创建一个匿名函数,原后将函数赋值一个变量,这个变量就指向了这个函数。

ü  匿名函数常用调用方式

定义一个匿名函数如下:

function(x, y, z) {return x + y + z;
}

   以上匿名函数没有名字,那么谁也不可能调用这个函数,因为没有指向这个函数的指针,我们可以像下面这样的方式调用匿名函数

  1. 直接调用
    var result = function (x, y, z) {return x + y + z;
    }(1,2,3)
  2. 将函数赋值给变量(如上函数表达式方式)

Javascript中允许有两种方式调用函数,第一种就是典型的函数调用:函数名(函数参数列表),另一种方式是将函数作为表达式:(用函数作为表达式)(参数列表)

比如上例中可以这样调用

1.    (func1)()
2.    ( function (x, y, z) { return x + y + z; })()

 

ü  匿名函数的常用法

    1:四则运算

      /* 四则运算 */var fourOperations = function (fn, x, y) {return fn(x, y);}var add = function (x, y) {return x + y;}alert(fourOperations(add, 10, 20));alert(fourOperations(function (x, y) {return x * y;}, 10, 20));

2:复杂对象数组的排序

在看复杂对象排序之前我们先来看下简单的数组排序

a.简单数组排序

        /* 数组排序 */var person1 = ["cnblog", "abc", "def", "cx"];person1.sort();alert(person1);

        在默认情况下,sort排序按升序排列数组项,排序过程中首先会调用项的toString()方法,原后比较得到的字符串。

 

        b.复杂数组排序

     /* 定义复杂对象 */function Person(name, age) {this.name = name;this.age = age;}Person.prototype.toString = function () {return "name: " + this.name + " age: " + this.age;}/* 初始化数组 */var person = [new Person("cnblog", 25),new Person("abc", 30), new Person("def", 26), new Person("cx", 31)];/* 直接使用匿名函数来进行排序 */person.sort(function (value1, value2) { return value1.name > value2.name ? 1 : -1; });alert(person);/* 改进排序方式 */person.sort(sortFunction("age"));alert(person);//        function showSortResult(person) { //            var result = "";//            for (var i = 0, length = person.length; i < length; i++) { //                result += ("name:" + person[i].name + " age:" + person[i].age + "
");//            }//            alert(result);//        }function sortFunction(property) {return function (value1, value2) {return value1[property] > value2[property] ? 1 : -1;}}

     对于复杂对象的操作在实际应用中是相当常见的,例如在对json对象进行排序时就可以使用上面的方法。

    3.利用匿名函数构建“块级作用域”,这个留着在讲作用域时再细讲

当然匿名函数的作用很多,也欢迎大家分享自己的一些实战经验

 

注:第一篇技术文章,多支持

转载于:https://www.cnblogs.com/Latitude/archive/2012/04/21/2461304.html

更多相关:

  • 草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...

  • 前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...

  • 1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态。1.1.2函数的作用函数是组织好的,可重复使用的,用来...

  • 原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...

  • 在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...

  •   /*禁止缩放safari浏览器*/ var scale = {disabledSafari: function () {/* 阻止双击放大*/var lastTouchEnd = 0;document.addEventListener("touchstart", function (event) {if (event.touch...

  •   $g.$utils = {/**舒工Ajax-lite 1.0 -- 最精简的ajax自定义访问方法*/ajax: function (o) {var p = o.post, g = o.get, d = p.data, a = p.async, J = 'json', j = p[J], s = g.success, e =...

  •   Sg.js框架核心概念: 1)所有变量、方法、类对象全部都是从属于$g主树,由$g分支出很多$g.变量名、$g.方法、$g.对象id、$g.类;2)获取控件内部属性必须使用公开的get方法获取,禁止直接用访问内部变量方式来获取控件内部变量、属性值;3)修改控件内部属性、绑定方法等都必须使用公开的set方法来操作,禁止直接用访问...

  •  一、ios header导航栏被推起解决方法 1 设置弹出软键盘时自动改变webview的高度 plus.webview.currentWebview().setStyle({ softinputMode: "adjustResize" // 弹出软键盘时自动改变webview的高度 }); 2 增加样式 html...

  • 前端发送Ajax请求到服务器,服务器返回数据这一过程,因原因不同耗时长短也有差别,且这段时间内页面显示空白。如何优化这段时间内的交互体验,以及长时间内服务器仍未返回数据这一问题,是我们开发中不容忽视的重点。 常见的做法是: 1、设置超时时间,一旦时间超过设定值,便终止请求;2、页面内容加载之前,手动增加一个 loading 层。 代码...