当前位置:首页 > 开发 > Web前端 > JavaScript > 正文

JavaScript基础知识 第二篇 Function

发表于: 2014-02-13   作者:babysuperman   来源:转载   浏览次数:
摘要: Function   1.function也是对象   在JavaScript中function也是对象,对象可以进行的操作,function都可以,在JavaScript中以下两种写法是基本一样的:   function foo() {} // 常规写法 var foo = function() {}; // JavaScript 中function的

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基础知识 第二篇 Function

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
背景知识 函数定义 在javaScript中,function的定义有3种: 1、匿名定义 function(){} 2、非匿名定义
背景知识 函数定义 在javaScript中,function的定义有3种: 1、匿名定义 function(){} 2、非匿名定
说到funciton,也是我对js非常吐槽的一点,封装的让我眼瞎,马蛋的,哥只能大眼睁着去黑盒的使用,
背景知识 函数定义 在javaScript中,function的定义有3种: 1、匿名定义 function(){} 2、非匿名定
一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些java
一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些java
1.什么是JavaScript JavaScript 是一门脚本语言,主要由 ECMAScript 规范(与任何的宿主无关),DOM
今天在公司论坛中看到一篇系统介绍JavaScript精华的文章,感觉受益匪浅,特意转载过来分享给大家,
说到prototype,就不得不先说下new的过程。 我们先看看这样一段代码: < script type ="text/jav
说到prototype,就不得不先说下new的过程。 我们先看看这样一段代码: < script type ="text/jav
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号