内容
---语法
---数据类型
---流程控制语句 上一小节
---理解函数 本小节

函数
--使用function关键字声明,后跟一组参数以及函数体

function functionName(arg0, arg1,..., argN) {
statements;
}

例如

function sayHi(name, message) {
console.log("Hello " + name + ", " + message);
}

--通过函数名来调用,后面加上圆括号和参数

sayHi("luking", "how are you today?");
//Hello luking, how are you today?

--不必指定返回值,

--使用return语句后跟返回值,来实现返回值

function sum(num1, num2) {
return num1 + num2;
}
sum(1,2); //

--执行完return语句后函数停止并立即退出

--可以使用条件语句来添加多个return 情况

function diff(num1, num2) {
if(num1 < num2) {
return num2 - num1;
} else {
return num1 - num2;
}
}

--return语句也可以不带返回值

--此时返回undefined
--用于需要提前停止函数执行而又不需要返回值的情况

function do(num) {
if(num > 5) {
return;
}
console.log("this is " + num);
}
do(3); //控制台输出:this is 3
do(6); //

--推荐做法

--要么让函数始终有返回值
--要么始终没有
--方便调试代码

理解参数
--ECMAScript函数的参数不同于大多数强语言
--不介意参数的类型
--也不介意是否多传,少传参数
--因为ECMAScript的参数在内部是用一个数组来表示的
--函数接受的始终是这个数组

--函数体内可以通过arguments对象来访问这个参数数组
--从而获得传递给函数的每一个参数
--arguments对象和数组类似
--可以用arguments[index] 来访问参数
--通过访问arguments.length属性返回传递的参数的个数

function doAdd(num1, num2) {
if(arguments.length == 1) {
return num1 + 10;
} else if(arguments.length == 2) {
return num1 + num2;
} else {
return 0;
}
}
doAdd(10); //
doAdd(10, 20); //
doAdd(); //

--arguments访问的参数值和命名参数保持一致

--修改arguments的值,会自动反应到对应的命名参数中,
--但是修改命名参数的值,不会改变arguments的值

function doAdd(num1, num2) {
arguments[1] = 10;
return num1 + num2;
}
doAdd(10,20); //

--如果只传一个参数,此时修改arguments[1],

--不会反应到命名参数中,无法改变num2的值
--因为arguments对象的长度由传入的参数个数决定
--不是由定义函数时的命名参数的个数决定
--没有传递值的命名参数将自动被赋予undefined

--严格模式下修改arguments的值,无法反应到命名参数中

--ECMAScript中的所有参数传递都是值传递,不可能通过引用传递参数
--包括引用类型,也只是传递了所引用的值,而不是参数本身的引用
--通过传递的引用的值可以修改引用类型的值
--但是无法修改参数本身的引用

function f(x) {
x[0] = 1;
x = new Array();
x[0] = 2;
x[1] = 3;
}
var a = [0, 1, 2];
f(a);
a; //1,1,2

没有重载
--重载;方法名一样,参数类型和个数不同(两个定义的签名)
--ECMAScript函数没有签名
--而是由包含零个或者多个值的数组来表示的
--真正的重载是不可能做到的
--定义相同名字的方法前者会被后者覆盖掉
--通过检查传入函数中参数的类型和数量做出不同的反应,可以模仿重载

《JavaScript高级程序设计》读书笔记(三)基本概念第六小节理解函数的更多相关文章

  1. 《javascript高级程序设计》笔记三

    第三章 基本概念 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScript高级程序设计> ...

  2. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  3. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  4. javascript高级程序设计读书笔记----面向对象的程序设计

        创建对象   工厂模式 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = ...

  5. Javascript高级程序设计读书笔记(第三章)

    第3章 基本概念 3.4 数据类型 5种简单数据类型:undefined.boolean.number.null.string. typeof操作符,能返回下列某个字符串:“undefined”.“b ...

  6. 《JavaScript高级程序设计》笔记:基本概念(三)

    数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string. typeof typeof null会返回“obj ...

  7. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  8. JavaScript高级程序设计-读书笔记(6)

    第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JS ...

  9. JavaScript高级程序设计-读书笔记(1)

    第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l        ECMAScript:提供核心语言功能: l        文 ...

随机推荐

  1. input标签中的id和name的区别

    做网站很久了,但到现在还没有搞明白input中name和id的区别,最近学习jquery,又遇到这个问题,就在网上搜集资料.看到这篇,就整理出来,以备后用. 可 以说几乎每个做过Web开发的人都问过, ...

  2. 题解【CodeForces1154A】Restoring Three Numbers

    Description Polycarp has guessed three positive integers \(a\), \(b\) and \(c\). He keeps these numb ...

  3. LED Decorative Light Manufacturer - Led Wall Lamp Performance Characteristics

    LED Decorative Light Manufacturer    introduction: LED wall lamp is a light-emitting diode as a ligh ...

  4. 解决:配置虚拟主机,重启apache,[warn] _default_ VirtualHost overlap on port 80, the first has precedence

    http://blog.csdn.net/kaizhu_qin/article/details/17506293 很多第一次配置apache的虚拟主机的时候,以为配置第一个虚拟主机完成以后,以后就不会 ...

  5. 【C 语言】一元二次方程

    求一元二次方程:ax2+bx+c=0 的根. 输入三个实数a,b,c的值,且a不等于0. 数学基础:一元二次方程 只含有一个未知数(一元),并且未知数项的最高次数是2(二次)的整式方程叫做一元二次方程 ...

  6. HTML学习(5)标题、水平线、注释

    HTML 标题 标题(Heading)是通过 <h1> - <h6> 标签进行定义的. <h1> 定义最大的标题. <h6> 定义最小的标题. 注: 浏 ...

  7. c++面向对象 之 基础 类修饰符 构造函数 友元函数

    1,类和对象 定义一个类,本质上是定义一个数据类型的蓝图.这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作. 类定义格式 ...

  8. ubuntu16.04无法打开终端

    最近将自带的python3.5更改为默认的python3.6,所以就出现了终端打不开的情况,以下是我的解决办法: 首先,按ctrl+alt+F1进入命令行模式,也就是无图形截面,这时候会让你输入用户名 ...

  9. 6_11 四分树(UVa297)<四分树>

    一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个子图表示一个点. f表示这块子图填满, p表示它还有4个子图, e表示没有子图(当然啦, 它也没有填满). 给定两个字 ...

  10. DataGridView编辑后立即更新到数据库的两种方法

    DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据. 方法一:基于DataAdapter对象创建一个CommandBuli ...