`
babysuperman
  • 浏览: 1927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

Function

 

1.function也是对象

 

在JavaScript中function也是对象,对象可以进行的操作,function都可以,在JavaScript中以下两种写法是基本一样的:

 

function foo() {} // 常规写法
var foo = function() {}; // JavaScript 中function的独特写法

 第二种写法在JavaScript中完全合法,有没有看出function是对象的感觉。引申一下,这么写也是合法的

 

function User() {} // User当做一个对象
User.clone = function() {} // 对象可以拥有属性

 其中User的首字母大写是构造函数的惯例写法,构造函数将在“JavaScript对象(object)”一文中介绍。

 

2.function作用域与闭包

 

JavaScript是以function作为作用域的,那么当两个函数嵌套起来,就构成了JavaScript中的闭包(closure)。例如:

function foo() {
    var i = 2;
    function bar() {
        alert(i); // 可以访问到父函数的变量。
    }
}

 闭包(closure)的完整概念比较复杂,在JavaScript中,简单理解为子函数可以调用父函数的变量,就可以了。

 

3.匿名函数

 

function声明中的函数name是可选的,当函数name不写的时候就是一个匿名函数,匿名函数由于没有name所以适用于只使用一次的情形,例如:

var arr = [ 2, 1, 3 ];
arr.sort(function(obj1, obj2) { 
    return obj2 - obj1;
});//arr.sort(f)的参数为一个用于比较大小进行排序的function

 利用sort使用一个匿名函数作为参数,来进行数组的排序操作。

 

 4.函数重载

 

JavaScript中没有函数重载,按照其他语言中的重载写法(例如Java),变量将会指向最后一个声明的函数,而不会重载,例如:

 

function foo() {
    alert('first func');
}

function foo(name) {
    alert('second func ' + name);
}

foo(); // alert('second func undefined');
foo('bar'); // alert('second func bar');

 

 在JavaScript中没有对函数重载的原生支持,但是我们很容易自己写一个函数来实现函数重载功能。函数重载需要做两件事:确定参数类型和确定参数数量。

 

确定参数类型可以利用typeof或者使用jQuery.type(),例如:

function foo( arg ) {
    if( typeof arg == 'number' ) {
        return 2 + arg;
    } 
    if( typeof arg == 'string' ) {
        return 'this is a string: '+ arg;
    }
}

alert( foo( 1 ) ); //3
alert( foo( 'bar' ) ) //this is a string: bar

 

确定参数类型需要利用function的arguments属性。arguments是类数组,包含了调用函数时传入的参数,但没有数组的pop(),push()等操作。例如:

function addAll() {
    var sum = 0;
    for (var i = 0; i < arguments.length; i++ ) {
        sum += arguments[i];
    }
    return sum;
}

addAll(1, 2, 3, 4); //10

 在编写类库代码时,需要考虑各种情况,也可能需要检查参数的情况。

 

小结:本文主要介绍了JavaScript中的function的特性,function是对象、闭包、匿名函数,以及如何在JavaScript中实现函数重载。

 

小作业:去研究下jQuery.type()函数的源码。有看不懂的地方,可参考lifesinger的github

 

分享到:
评论

相关推荐

    javascript基础知识总结

    以下是对JavaScript基础知识的总结,主要关注在网页中使用的弹出对话框、函数调用以及带有参数的函数。 1) Alert Box `alert()` 函数用于显示一个包含警告信息的单行对话框,用户只能点击“确定”按钮关闭它。在...

    javascript入门和基础知识

    ### JavaScript入门和基础知识 #### 为什么学习JavaScript? 1. **前端技术的重要组成部分**:JavaScript能够对页面内容进行实时验证,减少不必要的服务器请求,降低服务器负担。 2. **增强用户体验**:利用...

    javascript基础知识大全

    JavaScript是Web开发中不可或缺的...理解并熟练掌握这些JavaScript基础知识,将为你的Web开发之路打下坚实的基础。在实践中不断探索和学习,你将能够构建复杂的交互式Web应用,利用JavaScript的强大力量创造无限可能。

    JavaScript编程 基础知识

    ### JavaScript编程基础知识详解 #### 一、JavaScript代码的放置与引入方式 1. **JavaScript代码应置于`&lt;script&gt;&lt;/script&gt;`标签内** - JavaScript 代码通常被包含在 HTML 文件中的 `&lt;script&gt;` 标签之间。 - 示例...

    JavaScript基础第06天笔记.md

    # JavaScript基础第06天笔记知识点详解 ## 1. 内置对象 ### 1.1 内置对象概述 在JavaScript中,对象被分为三种类型:自定义对象、内置对象以及浏览器对象。前两者属于ECMAScript的基础部分,而浏览器对象则是...

    Secrets of the JavaScript Ninja 2nd 第2版 pdf 0分

    《Secrets of the JavaScript Ninja》第二版是John Resig、Bear Bibeault、Josip Maras合著的一本专注于高级JavaScript编程技巧的书籍。第二版涉及了ECMAScript 6 (ES6)中的新特性,以及如何使用它们来编写更加优雅...

    一套JavaScript 语言基础知识点总结

    本文将深入探讨JavaScript的基础知识点,包括语法、变量、数据类型、控制结构、函数、对象、数组、DOM操作等方面。 1. **JavaScript 语法基础** - 注释:单行注释`//`和多行注释`/*...*/` - 行与语句:以分号`;`...

    JavaScript 语言基础知识点总结(思维导图)_蜗牛.zip

    本文将深入探讨JavaScript的基础知识点,通过思维导图的形式帮助学习者更好地理解和记忆。 1. 变量与数据类型: JavaScript支持变量的动态类型,这意味着你无需在声明时指定其类型。主要有七种基本数据类型:...

    JavaScript基础应用(讲义).doc

    ### JavaScript基础应用知识点详解 #### 一、文档对象模型(DOM)层次结构 - **概念**: DOM 是一种标准,用于表示 HTML 和 XML 文档的结构。它定义了文档的逻辑结构及其方法和属性。 - **层次结构**: DOM 将文档...

    javascript 教程,较详细的讲述了javascript的基础知识

    本教程旨在提供一个全面的JavaScript基础知识概览,帮助初学者快速入门并深入理解其核心概念。 一、JavaScript概述 JavaScript最初由Brendan Eich在 Netscape Navigator 浏览器中开发,主要用作客户端脚本语言,...

    JavaScript语言基础.pdf

    ### JavaScript语言基础知识点详解 #### 1. 变量定义 **JavaScript** 是一种广泛使用的脚本语言,常用于Web前端开发。对于初学者来说,理解变量定义的基础知识至关重要。 - **变量命名规则**: - 变量名区分大小...

    JavaScript 语言基础知识点总结(思维导图)

    以下是对JavaScript语言基础知识点的详细总结: 1. 变量与数据类型: JavaScript 支持七种数据类型:Undefined、Null、Boolean、Number、BigInt、String 和 Symbol,以及一种复合类型——Object。变量声明使用 `...

    (完整word版)JavaScript基础知识点归纳(推荐)(良心出品必属精品).docx

    以下是对文档中提到的一些关键JavaScript基础知识的详细解释: 1. **全局变量与局部变量**:全局变量在整个程序范围内都可访问,而局部变量只在定义它的函数内部有效。如果在函数外部定义变量,那么它是全局的;...

    JavaScript基础练习_day11

    ### JavaScript基础练习_day11知识点解析 #### 一、变量声明与作用域 **知识点概述:** 本部分内容涉及JavaScript中的变量声明方式以及不同声明方式之间的区别。JavaScript中有多种声明变量的方式,每种方式都有其...

    JavaScript_开发者经常忽略或误用的七个基础知识点.

    以下便是七个容易被忽略或误用的JavaScript基础知识点: 1. **正则表达式中的全局标志位 /g 和 /i** - 在`String.prototype.replace`方法中,如果不使用全局标志位 `/g`,只会替换第一个匹配的子串。例如: ```...

    javascript知识点总结《一》

    ### JavaScript知识点总结《一》 ...以上是关于JavaScript的基础知识点总结,涵盖了初步认识JavaScript以及JavaScript的基本语法等内容。这些知识点对于初学者来说非常重要,有助于快速入门并进一步深入学习。

    javascript基础

    ### JavaScript基础知识点详解 #### 一、JavaScript简介 ##### 1.1 JavaScript的概念与特点 - **脚本编写语言**:JavaScript是一种脚本语言,它采用小程序段的方式实现编程,其基本结构形式与C、C++、VB、Delphi...

    JavaScript从入门到精通(第2版)PPT.7z

    在“JavaScript从入门到精通(第2版)PPT”这套教学资料中,我们将深入探讨JavaScript的核心概念、语法特性以及实际应用。 1. **基础概念** - **变量与数据类型**:JavaScript支持基本数据类型(如字符串、数字、...

    javascript正则表达式基础知识入门.docx

    ### JavaScript正则表达式基础知识入门 #### 正则表达式的概念与作用 正则表达式是一种强大的文本处理工具,能够帮助开发者实现对字符串的操作:如替换、从文本中取出符合某些特性的数据等。在JavaScript中,正则...

    javascript基础PPT.zip

    JavaScript基础PPT.zip文件很可能是某位讲师或教育机构为了教授JavaScript基础知识而编排的一套教学材料。以下是对JavaScript基础知识的详细阐述: 一、JavaScript简介 JavaScript是由Netscape公司的Brendan Eich在...

Global site tag (gtag.js) - Google Analytics