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. IE浏览器URL中文传参,后端接收是乱码问题处理

    这个问题还是因为IE浏览器是国外产品,人家交流的主要语言是英语,中文不识别. 直接上代码,亲测无误. //判断是否是IE浏览器 function isIE() { var userAgent = na ...

  2. redis五种基本类型CRUD操作

    1.String 增:set key1 value1 改:set key1 new-value.自增 incr key1.按照特定值递增:increby key1 inrevalue 删:del ke ...

  3. neo智能合约的生命周期

  4. Git分支(2/5) -- Fast Forward 合并

    快捷操作: 切换并创建分支: git checkout -b 分支名. git checkout -b some-change 然后我打开某个文件(index.html)修改一下标题. Commit之 ...

  5. C语言的隐式类型转换

    看了一篇博文,该文章中有如下描述 #include <stdio.h> int main() { unsigned ; unsigned ; )) //a和b-1的结果-1都被转换为int ...

  6. Liquibase的简单使用

    LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.它的目标是提供一种数据库类型无关的解决方案,通过执 ...

  7. 【Linux】 linux的进程系统一点补充

    linux进程系统 ■ 程序 vs. 进程 程序静态地存放在磁盘中.用户可以触发执行程序,被触发后的程序就存进内存中成为一个个体,即为进程. 有些进程(比如crond需要每分钟都扫描.守护进程等等)是 ...

  8. 关于java中的值传递与引用传递遇到的问题

    来源于:https://www.nowcoder.com/test/question/done?tid=14302398&qid=25373#summary 下列java程序的输出结果为___ ...

  9. CAS 之 Https And Database Authentication(三)

    CAS 之 Https And Database Authentication(三) 标签(空格分隔): CAS sso-examples-guides源码 Intro(介绍) 由上节可知Apereo ...

  10. 铜齿铁牙UP计划

    铜齿铁牙UP计划 我在""做教练"之好声音训练"给出了老师.播音主持学习者,声乐学习者科学用声三要点: 用气发声 共鸣发声 虚实结合 用气发声首先要学会腹式呼吸 ...