`

JavaScript世界的一等公民 - 函数

 
阅读更多

 

http://software.intel.com/zh-cn/articles/javascript-first-class-citizen-function?page=2

 

JavaScript世界的一等公民 - 函数

简介

在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作为返回值,就需要通过函数指针(function pointer)、代理(delegate)等特殊的方式周折一番。
而在JavaScript世界中函数却是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值、传参、返回,这样的函数也称之为第一级函数(First-class Function)。不仅如此,JavaScript中的函数还充当了类的构造函数的作用,同时又是一个Function类的实例(instance)。这样的多重身份让JavaScript的函数变得非常重要。

一、JavaScript函数入门级

JavaScript函数像一般语言一样也是遵循先声明后使用的原则,函数名只能包含字母、数字、下划线或$,且不能以数字开头。函数常见的声明方式有以下两种:
// 直接声明函数myfunc
function myfunc(/* arguments */) {
}

// 把匿名函数赋值给本地变量myfunc
var myfunc = function(/* arguments */) {
}
 注意,上面两种函数声明方式存在细微的差别:第一种方式在声明时就是一个命名的函数,无论是声明在调用之前、调用之后,甚至是不会执行到的位置(例如return语句之后或是永远不会为真的分支里),都在整个作用域可访问;第二种方式是通过把匿名函数赋值给变量的方式,严格意义上说这不是一个函数的声明(function declaration)而是一个函数表达式(function expression),在赋值之前这个函数不能被任何代码访问到,也就是说这个赋值必须在调用之前完成,否则调用时会出现错误:"TypeError: undefined is not a function"。例如:
myfunc1(); // 能够正常调用,因为myfunc1采用直接声明的方式

function myfunc1() {
}

myfunc2(); // 出错 TypeError: undefined is not a function

var myfunc2 = function() {
};
 
分享到:
评论

相关推荐

    javascript函数式编程

    一等公民的函数:在函数式编程中,函数是一等公民,这意味着函数可以作为参数传递给其他函数、作为结果返回,也可以被赋值给变量。这一特性让代码更加灵活,支持高级的抽象。 纯函数的好处:纯函数是指那些不依赖于...

    javascript源码大全------

    3. **函数式编程**:JavaScript也支持函数式编程风格,如函数作为一等公民、闭包、高阶函数、柯里化、函数组合等概念。 4. **异步编程**:JavaScript的事件循环和回调函数是处理异步操作的基础。Promise、async/...

    W3C Javascript 2010-07-19.zip

    2. 函数式编程:JavaScript支持函数作为一等公民,可以将函数作为参数传递,也可以作为返回值。 3. 基于原型的对象:所有对象都继承自一个基础对象,通过原型链实现继承。 4. 弱引用:JavaScript具有弱引用机制,...

    javascript实现根据函数名称字符串动态执行函数的方法示例

    首先,我们需要理解,在JavaScript中,函数是一等公民,这意味着函数可以作为变量来存储,可以作为参数传递给其他函数,也可以作为其他函数的返回值。利用这些特性,我们能够通过函数名的字符串形式来动态调用函数。...

    Javascript高级程序设计---笔记归类.pdf

    函数是JavaScript的核心,它不仅可作为值传递,还能作为一等公民参与各种操作。arguments对象在函数内部自动创建,记录了传入的所有参数,即使未在函数定义中声明这些参数。Function构造函数允许动态创建函数对象,...

    JavaScript函数式编程.pdf

    在JavaScript中,函数是一等公民,这意味着函数可以被赋值给变量、作为参数传递给其他函数以及作为其他函数的返回值。函数式编程强调纯函数(pure functions)和不可变性(immutability),纯函数指的是相同的输入...

    JavaScript 权威指南--第6版,含HTML5

    - 函数:函数作为一等公民的概念,可以被赋值给变量、作为参数传递及返回。 - 对象与原型链:对象的创建方式、属性访问与修改、原型链的构成与查找机制。 - 异常处理:错误处理机制,如try-catch语句。 - **1.2 ...

    JavaScript经典源码收藏-jsp.rar

    3. **函数作为一等公民**:函数可以作为其他函数的参数,也可以作为返回值。 4. **事件驱动**:通过监听和响应用户或系统的事件来触发代码执行。 **JavaServer Pages (JSP)** JSP是由Sun Microsystems(现已被...

    javascript (2)-源码.rar

    2. **函数式编程**:JavaScript支持函数作为一等公民,可以作为参数传递,也可以作为返回值。此外,它还提供了闭包和高阶函数等函数式编程概念。 3. **原型继承**:JavaScript的对象可以通过原型链进行继承,这是一...

    JavaScript自学手册-电子教案

    - 函数:掌握函数的定义、调用以及函数作为一等公民的特性,理解闭包的概念。 2. **DOM操作** - DOM(Document Object Model)是HTML和XML文档的结构表示,JavaScript通过DOM可以访问和修改页面元素。 - 学习...

    JAVASCRIPT函数之高阶函数.pdf

    高阶函数是函数式编程的核心概念之一,在JavaScript中尤为重要,因为JavaScript函数是"一等公民"。 ### 知识点一:高阶函数定义 高阶函数指的是可以接受一个或多个函数作为参数的函数,也可以返回一个函数。这样的...

    JavaScript函数式编程pdf

    1. 函数作为一等公民:在JavaScript中,函数是可以被赋值给变量、作为参数传递以及作为其他函数的返回值的。这一特性使得JavaScript非常适合函数式编程,因为我们可以灵活地操作和组合函数。 2. 高阶函数:高阶函数...

    JavaScript前端开发案例教程-源代码.rar

    在JavaScript中,函数是一等公民,可以作为参数传递,也可以作为返回值。对象则是一种数据结构,允许我们存储键值对,通过原型链机制,JavaScript实现了面向对象编程的一些特性。在压缩包中的案例可能涵盖了这些基本...

    javascript嵌套函数和在函数内调用外部函数的区别分析.docx

    在JavaScript编程中,函数是一等公民,这意味着函数可以作为参数传递给其他函数,也可以作为其他函数的结果返回。这种特性使得JavaScript能够支持强大的功能,如闭包、高阶函数等。本文将深入探讨JavaScript中两种...

    javaScript函数式编程

    2.1 函数是一等公民24 2.2 Applicative编程30 2.2.1 集合中心编程31 2.2.2 Applicative编程的其他实例32 2.2.3 定义几个Applicative函数35 2.3 数据思考36 2.4 总结43 第3章 变量的作用域和闭包44 3.1 全局作用域44 ...

    JS函数式编程指南

    - **背景**: JavaScript虽然通常被视为一种命令式编程语言,但其支持函数作为一等公民的特性使得它能够很好地用于函数式编程。 ##### 1.2 介绍 - **概念**: 函数式编程是一种编程范式,其中程序被设计为一系列纯...

    JavaScript中匿名函数的用法及优缺点详解_.pdf

    - **函数式编程**:JavaScript支持函数作为一等公民,匿名函数是实现函数式编程的关键,如高阶函数、映射、过滤等操作。 5. **优缺点**: - 优点: - 避免全局变量,提高代码安全性。 - 可用于快速实现一次性...

    JavaScript (1)-源码.rar

    3. **函数(Functions)**:JavaScript支持函数表达式和函数声明,函数可以作为一等公民,可以赋值给变量、作为参数传递和作为返回值。 4. **对象(Objects)**:JavaScript的对象是一种键值对的集合,可以使用字面...

    一本关于JavaScript中函数式编程的书

    一、函数作为一等公民 在JavaScript中,函数是第一类对象,这意味着它们可以赋值给变量、作为参数传递给其他函数,也可以作为其他函数的返回值。这是函数式编程的基础,因为它允许我们用函数来构建更复杂的函数。 ...

Global site tag (gtag.js) - Google Analytics