函数是定义一次但却可以调用或执行任意多次的代码块。

一、函数定义

javascript中的函数使用function关键字来定义,常用的函数定义分为三种形式:

  • 声明式函数定义
 function sum(a,b)
 {
     return a+b;
 }    

 alert(sum(,));
  •   函数表达式
 var sum = function(a,b)
 {
     return a+b;
 };

 alert(sum(10,20));

函数声明与函数表达式的区别:

1、以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用.

2、以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的.

二、函数的返回值

1、若函数没有指明返回值,默认返回的是'undefined'。

2、当函数有返回值时,返回值是什么就返回什么。如下:

function box(name, age) {                    //有参数的函数
    return '你的姓名:'+name+',年龄:'+age;//通过return 把函数的最终值返回
}
alert(box('小徐', 25));                        //调用函数得到返回值,然后外面输出

返回结果:

3、return语句还有一个功能就是退出当前函数,注意和break的区别。PS:break用在循环和switch分支语句里。在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页.

三、函数调用

函数体代码在函数被调用时才会执行。Javascript函数常用的有3种调用方式:

  • 普通的函数调用
  • 方法调用
  • 构造函数调用

(1)函数调用形式

 function func() {
  alert("Hello World");
 }

func();
 // 使用函数的Lambda表达式定义函数,然后调用
 var func = function() {
  alert("你好,小徐");
 };
 func();

在函数调用模式中,函数里的 this 关键字指全局对象,如果在浏览器中就是 window 对象.

(2)方法调用模式

将函数赋值给对象的成员后,那么这个就不在称为函数,而应该叫做方法

 // 定义一个函数
 var func = function() {
  alert("我是一个函数么?");
 };

 // 将其赋值给一个对象
 var o = {};
 o.fn = func; // 注意这里不要加圆括号
 // 调用
 o.fn();

在方法中this专指当前对象. 即o.fn 中的this 指的就是对象o.

(3)构造器调用模式

 // 定义一个构造函数
 var Person = function() {
   this.name = "上海";
   this.sayHello = function() {
     alert("你好,这里是" + this.name);
   };
 };
 // 调用构造器,创建对象
 var p = new Person();
 // 使用对象
 p.sayHello();

this指的是对象本身.

除了上面简单的使用以外,函数作为构造器还有几个变化. 分别为:
1、 所有需要由对象使用的属性,必须使用this引导;
2、 函数的 return 语句意义被改写,如果返回非对象,就返回this;

四.arguments对象

ECMAScript函数不介意传递进来多少参数,也不会因为参数不统一而错误。实际上,函数体内可以通过arguments对象来接收传递进来的参数。arguments对象的length属性可以得到参数的数量。

我们可以利用length这个属性,来智能的判断有多少参数,然后把参数进行合理的应用。比如,要实现一个加法运算,将所有传进来的数字累加,而数字的个数又不确定。

function box() {
    var sum = 0;
    if (arguments.length == 0) return sum;        //如果没有参数,退出
    for(var i = 0;i < arguments.length; i++) {    //如果有,就累加
        sum = sum + arguments[i];
    }
    return sum;                            //返回累加结果
}
alert(box(5,9,12));

JavaScript笔记:函数的更多相关文章

  1. JavaScript笔记- 函数声明和函数表达式(001)

    function 是 Javascript 中的第一类对象,这就意味着函数可以像其他值一样被传递.一个最常见的用法就是将一个匿名函数作为回调函数传递到另外一个异步函数中. 函数声明 ? 1 funct ...

  2. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  3. [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

    js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...

  4. javascript oop深入学习笔记(二)--javascript的函数

    一.概述: 函数是进行模块化程序设计的基础, javascript重的的函数不同于其他语言,每个函数都作为一个对象被维护和运行.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或则讲函数作为参 ...

  5. JavaScript笔记基础篇(二)

    基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt ...

  6. [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符

    “1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...

  7. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

    函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...

  8. 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight

    做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...

  9. JavaScript笔记(4)

    接上一篇笔记    -----> 打印:                    打印:    打印: 一.break 和 continue 的区别 1.break 1.break语句可用于跳出循 ...

随机推荐

  1. Docker搭建Java Web运行环境

    1. 前提条件 安装了Docker的64位Linux 操作系统 Linux操作系统镜像 Linux版本的JDK压缩包 Linux版本的Tomcat压缩包 2. 启动容器 容器是在镜像的基础上来运行的, ...

  2. [原创]cocos2d-x研习录-第三阶 多分辨率适配器

    在移动终端(智能手机)平台下开发游戏一般都会涉及到屏幕多分辨率适配问题,原因是手机款式多种多样,不同的款式存在有不同的尺寸,即使尺寸相同又可能存在不同的分辨率. 手机屏幕尺寸:指手机屏幕对角线长度. ...

  3. golang: 根据json生成go源文件

    https://github.com/ChimeraCoder/gojson $ git clone https://github.com/ChimeraCoder/gojson.git$ cd go ...

  4. Ubuntu14.04+Beanstalkd1.9最佳实践

    目录 [TOC] 1.基本概念 1.1.什么是Beanstalkd?   Beanstalkd 是一个轻量级消息中间件,它最大特点是将自己定位为基于管道 (tube) 和任务 (job) 的工作队列. ...

  5. winform导入导出excel,后台动态添加控件

    思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...

  6. HTML CSS

    HTML CSS css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化.存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点.语法:styl ...

  7. java容器的一些存取用法

    关于集合(list,set,map)的遍历与增强for循环的使用     java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以 ...

  8. Android framework完整源码下载

    包括cpp等native代码.可zip打包下载. https://github.com/android/platform_frameworks_base/branches/stale Android线 ...

  9. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  10. 重构MVC多条件+分页解决方案

    为支持MVC的验证,无刷新查询,EF,以及让代码可读性更强一点,所以就重构了下原来的解决方案. 这里就简单讲下使用方法吧: Model: 继承PagerBase: 1 public class Sea ...