在JavaScript中,函数可以:被赋值给一个变量,被赋值为对象的属性、作为参数被传入别的函数、作为函数的结果被返回、用字面量来创建。

1. 赋值给一个变量

//声明一个函数,接受两个参数
function add(x,y){
return x+y;
} var a=0;
a=add;//将函数赋值给一个变量
var b=a(2,3);
alert(b);//5

结果:

分析:赋值之后,变量a引用函数add,即a的值是一个函数对象(一个可执行代码块),所以可以使用a(2,3)这样的语句进行求和操作。通常的编程语言中,我们会将函数/方法的返回值(基本数据类型或者对象)赋值给其他的变量,但是无法做到将函数/方法本身赋值给其他变量。究其原因,是因为在这些编程语言中,没有一种数据类型表示函数。

2. 赋值为对象的属性

var obj={
id:"obj1";
}
obj.func=add;//赋值为对象的属性
obj.func(2,3);//返回5

实际上,这个和第一个例子本质一样。第一个例子中的a变量,是全局对象window的一个属性,而在第二个例子中则为obj对象。

3. 作为参数传递


function adPrint2(str,handler){
alert(handler(str));
}
//将字符串转换为大写形式,并返回
function up(str){
return str.toUpperCase();
} //将字符串转换为小写形式,并返回
function low(str){
return str.toLowerCase();
}
adPrint2("hello,world",up);
adPrint2("hello,world",low);

可以看到:函数adPrint2的第二个参数,实际上是一个函数(接受一个字符串为参数,并返回参数字符串的大写/小写形式),将这个处理函数作为函数参数传入,在adPrint2的内部,仍然可以调用这个函数。在客户端的JavaScript中,在异步事件的回调函数中更是必须的一种模式(比如:鼠标点击事件,Ajax请求的回调等)

4. 作为函数的返回值


function currying(){
return function(){
alert("curring");
}
}

1.调用currying()会得到:function(){

alert("curring");

}

2.如果调用currying返回的是这个匿名函数,需要这样:currying()();第一个括号表示操作,表示调用currying本身,返回值是函数;第二个括号操作符调用这个返回值,所以会得到这样的结果:curring;

5. 函数用字面量来创建

参考《JavaScript学习指南》P100

我们可以使用String构造器创建关键字符串,然后使用String方法访问它。

var str=new String("Learning Java");
document.writeIn(str.replace(/Java/,"javascript"));

也可以基于基本字符串类型使用变量,并且仍然可以访问String对象的方法。当调用String对象的方法时,JavaScript引擎会隐式地将字面量包装在一个对象中。

var str2="Learning Java";
document.writeIn(str2.replace(/Java/,"javascript"));

实际上可以这样写:document.writeIn("Learning Java".replace(/Java/,"javascript"));

所谓的函数字面量,就是说当想创建一个函数时候,不使用function构造函数,同样可以将其赋给一个变量,这样它在字面量上就成了函数字面量。

var func=function (params){
statements;
}

函数字面量也称为函数表达式,因为这样创建的函数将称为表达式的一部分,而不是一个特有类型的语句。它们像匿名函数一样没有定义函数名称,不过和匿名函数直接是有差异的。函数字面量只会解析一次,实际上,除了把函数赋给一个变量之外,函数字面量和声明式函数式类似的:

var func=function(x,y){
return x*y;
} alert(2,3);

JavaScript 函数用途的更多相关文章

  1. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  2. 第八章:Javascript函数

    函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的: ...

  3. javascript 函数介绍

    javascript函数使用的时候,往往都比较单一,这里介绍几种不同于我们之前使用的函数调用方式! 1.函数表达式包含名称,用于递归 var f = function s(num) { if (num ...

  4. 第一百零二节,JavaScript函数

    JavaScript函数 学习要点: 1.函数声明 2.return返回值 3.arguments对象 函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值 ...

  5. 【JS小技巧】JavaScript 函数用作对象的隐藏问题

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  6. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  7. 【JS小技巧】JavaScript 函数用作对象的隐藏问题(F.ui.name)

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  8. 深入理解javascript函数系列第三篇

    前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...

  9. 【废弃】【WIP】JavaScript 函数

    创建: 2017/10/09 更新: 2017/11/03 加上[wip] 废弃: 2019/02/19 重构此篇.原文归入废弃  增加[废弃中]标签与总体任务 结束: 2019/03/12 完成废弃 ...

随机推荐

  1. Sweetkang 的机器学习实验室 (1)

    前言 近年来,Machine Learning 在许多领域上已然取得了可喜的成就,非常火热.就我个人来讲,有意将业余 Sport Programming 的范围扩展一下,譬如 Topcoder Mar ...

  2. 通俗理解java序列化

    1 序列化是干什么的呢? 搬家的 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object sta ...

  3. tcxgrid控件中drag a column header here to group by that column移除方法

  4. [C#]合并单元格(行、列)

    详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak説明:控件ID指的是页面上面的Grid ...

  5. docker : RabbitMQ ElasticSearch

    docker  运行RabbitMQ容器 docker run -d -p 5672:5672 -p 15672:15672 --name 命名 CONTAINER ID 放出5672  /  156 ...

  6. C语言顺序结构和分支结构总结

    1. 本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 感觉学的内容比较基础,也是日后编程的基石.今后还应多加练习,能够更自如地运用,避免低级错误,一步步地提 ...

  7. ERWin7.2在Windows 8.1中生成数据库遇到的问题!

    我在Windows 8.1中使用ERWin7.2,想象以前在windows 7 或者XP里那样先预览一下要生成的SQL语句,结果我发现居然没有“preview”按钮了,自然也就无法看到要生成的SQL语 ...

  8. 深入了解java虚拟机(JVM) 第三章 内存区域----堆空间

    一.堆的含义 jvm堆的区域主要是用来存放对象的实例,它的空间大小是JVM内存区域中占比重最大的,也是jvm最大的内存管理模块,最重要的是,这个区域是垃圾收集器主要管理的区域,这意味着我们在考虑垃圾回 ...

  9. “全栈2019”Java第七十五章:内部类持有外部类对象

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. JOISC2019Day 1試験 (Examination)

    题面 官网 题解 就是个裸的三维数点,\(CDQ\)直接套上去就行了 //minamoto #include<bits/stdc++.h> #define R register #defi ...