1.函数声明和函数表达式

通过字面量创建函数的方式有两种函数声明和函数表达式:

  函数声明:

function sum(x, y) {

        var result = x + y;

        return result;
}

  函数表达式:

var sum = function (x, y) {

        var result = x + y;

        return result;

    };

函数声明和函数表达式除了在语法上有一些差异外,作用都是一样的。

函数声明被提升到上下文的顶部(函数所在的作用域)。也就是说我们可以在函数声明之前使用它,并且不会产生错误。例如:

var result = sum(3, 5);
console.log(result); function sum(x, y) { var result = x + y; return result;
}

但是,函数表达式不能被提升,下面的代码会报错:

var result = sum(3, 5);

    console.log(result);

var sum = function (x, y) {

    var result = x + y;

    return result;
};

建议大家无论在使用哪种字面量的方式创建Function类型的对象时,一定要先声明后使用。

2.将函数作为值

我可以像其他对象那样使用函数,比如,可以将它们赋值给另一个变量,可以将将它们作为对象的属性值,可以作为参数传递给其他函数,还可以作为其他函数的返回值。

  1.可以将它们赋值给另一个变量

function sayHi() {
console.log('Hi!');
} sayHi(); var sayHi2 = sayHi; sayHi2();

  2.可以将将它们作为对象的属性值

 function sayHi() {
console.log('Hi!');
} var person = { name: '张三',
greeting: sayHi }; person.greeting();

  3.可以作为参数传递给其他函数

var numbers = [1, 25, 18, 4, 7, 10, 2, 6];

        var result1 = numbers.sort();

        console.log(result1);

        var result2 = numbers.sort(function(a, b){

            return a - b;

        });

        console.log(result2);

4.可以作为其他函数的返回值

function parent(){

            var i = 0;

            function child(){
i++;
console.log(i);
} return child;
} var func = parent();
func();

3.函数的参数

形参:创建函数时,指定的参数。
实参:调用函数时,实际传递给函数的参数。

函数另一独特之处是无论我们传递给它多少个参数它都不会报错。这是因为我们传递给函数的实参实际上被保存到了一个类似于数组的对象中,arguments,数组可以包含任意数量的元素,所以可以我们向函数传递任意数量的实参。我们在访问这些参数的时候可以通过数组下表的方式访问。

function sum (x, y){
return x + y;
} var result1 = sum(2, 3);
console.log(result1); var result2 = sum(2, 3, 5, 6);
console.log(result2); var result3 = sum();
console.log(result3); var result4 = sum(2);
console.log(result4);

由于函数没有形参,我们必须阅读函数体内的代码才能知道函数需要几个形参,所以很多开发人员愿意使用arguments对象。例如:

function sum(){
return arguments[0] + arguments[1];
}

然而,有些时候使用arguments比使用形参更高效。比如,我们要创建一个用来求和的函数,它可以接受任意数量的参数,并返回它们的和。这个时候我们就不能形参,因为我们不知道会传递过来多少个实参,因此,使用arguments是最好的选择。

function sum() {

    var result = 0,
i = 0,
len = arguments.length; while(i < len){ result += arguments[i];
i++;
} return result;
} console.log(sum(2, 5, 7, 5, 5 ,90));

理解JavaScript中函数方法的更多相关文章

  1. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

  2. 深入理解javascript中的立即执行函数(function(){…})()

    投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...

  3. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  4. 深入理解javascript中的立即执行函数

    这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包住业务代码,使用jquery时比较常见,需要的朋友可以 ...

  5. 如何理解JavaScript中的函数

    转: 如何理解JavaScript中的函数 JS中的函数简介 JS中的函数是一种通过调用来完成具体业务的一段代码块.最核心的目的是将可重复执行的操作进行封装,然后供调用方无限制的调用. JS中的函数的 ...

  6. 深入理解JavaScript中创建对象模式的演变(原型)

    深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...

  7. 深入理解JavaScript中的属性和特性

    深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...

  8. 【干货理解】理解javascript中实现MVC的原理

    理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...

  9. 理解javascript中的策略模式

    理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效 ...

随机推荐

  1. 为什么需要RPC,而不是简单的HTTP接口

    转载自:http://www.oschina.net/question/271044_2155059?sort=default&p=1#answers 目前有很多Java的RPC框架,有基于J ...

  2. PHP实现发送模板消息到微信公众号

    简述:在这里会具体讲述到如何实现:如何通过后台的代码来实现发送模板消息到已经关注了"心想"公众号的用户. (本人新手,目前实习中,我的所有文档都是在自己开发过程中的记录,有些言语跟 ...

  3. 【吐槽向】iOS 中的仿射变换

    什么是仿射变换矩阵 CGAffineTransform 实际上就是一个用于绘制 2D 图形的的仿射变换矩阵.仿射变换矩阵用于旋转.缩放.平移.扭曲(skew)在图形上下文中绘制的对象.CGAffine ...

  4. 网络通信 --> 互联网协议(一)

    互联网协议 一.概述 如何分层有不同的模型,有的模型分七层,有的分四层.这里介绍把互联网分成五层. 最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做&q ...

  5. java集合框架详解

    java集合框架详解 一.Collection和Collections直接的区别 Collection是在java.util包下面的接口,是集合框架层次的父接口.常用的继承该接口的有list和set. ...

  6. div内文字显示两行,多出的文字用省略号显示

    用-webkit-私有属性,代码如下:text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;disp ...

  7. Java基础学习笔记十九 IO

    File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再 ...

  8. C# 7.0 观察者模式 以及 delegate 和 event

    观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, 它能从气象站获得这三个数据. 还 ...

  9. Beta Scrum Day 5

    听说

  10. iOS开发-FFmpeg深入分析

    FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒体基础知识,否则其源代码会非常晦涩难懂.本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一 ...