函数的作用
通过函数可以封装任意多条语句,而且可以在任何地方,任何时候调用执行。
函数的定义
函数使用function声明,后跟一组参数以及函数体
语法:
function functionName([arg 0,arg 1,...arg n]){
statements
}
说明:
- functionName是要定义的函数名,属于标识符,要符合标识符的定义规则
- []内的内容为函数的参数
- []说明里面的内容不是必须的,他不是语法,若没有参数需要传递,则无需写参数
函数的调用
语法:
函数名([arg 1,arg 2,...arg n])
举个栗子




函数的返回值
任何函数通过return语句,后面跟着返回的的值来实现返回值(与c语言类似)


这个简单例子中,使函数返回值为sum,在后面的调用中直接使用,同样也可将函数返回值赋给新的变量在后续进行使用,return同样也可以无返回值
说明:
- 函数会在执行完return语句之后停止并立即退出
- return语句也可以不带有任何返回值,用于提前停止函数执行又不需要返回值的情况
函数中的参数
不在意参数个数以及类型
arguments
ECMAScript中的参数在内部用一个数组来表示,在函数体内通过arguments对象来访问这个数组参数
说明:
- arguments对象只是与数组类似,并不是Array(数组)的实例
- []语法访问它的每一个元素
- length属性确定传递参数的个数

使用方法与c语言中数组类似

当使用arguments在函数体中改变了传入参数的值时,则打印结果会改变为改变后的值
严格模式(补充)
参考文章: www.cnblogs.com/karthuslori… 以及 www.cnblogs.com/zhonghongli…
严格模式使js在严格的条件下运行,在该模式下,很多原本不会报错的代码会报错并组织运行,例如:js中的饮食创建全局变量会被阻止运行
好处:提高了代码的健壮性
用法
在进入严格模式的作用域开头输入"user strict"

小栗子:求平均值

函数的对象
参考文章:
Javascript中的所有事物都是对象(包括 字符串、数值、数组、函数...)并且JavaScript中允许自定义对象
对象是一种特殊的数据,拥有属性和方法
对象创建
函数对象的使用与c语言中结构体类似,在变量中声明多个属性,同时还可包含函数以及对象
在Javascript中变量声明为全局变量,当变量数量多的时候,全局变量的挨个声明会导致代码繁琐,并且起名困难,使用对象更加方便且不易出错,故在js使用过程中应该尽可能少的使用全局变量
直接创建

注意事项:
- 对象中的各个属性之间用逗号隔开
- 最后一个属性后不需要加逗号
- 对象中的属性可以添加函数,也可添加对象
函数构造创建
构造函数需要以一个大写字母开头,非构造函数以小写字母开头
构造函数本身也是一个函数,只是用来创建对象


补充:
instanceof+构造函数名 :测试一个对象是否为一个类的实例
访问对象的属性
可以通过
对象名.属性名
对象名['属性名']
这两种方式对 对象 中的属性进行访问,可以重新进行赋值也可添加或删除某个属性

这时控制台打印的内容为后赋的值

添加与删除

判断属性是否存在于这个对象中,并将结果打印在控制台
console.log('属性名' in 对象名);
若存在,则返回true,若不存在,返回false

枚举(将属性值全部打印在控制台)
for in 语句:
for (var p in 对象名)//声明一个变量p,用来存放访问的属性名

在访问属性值的时候不可以用'.'这种写法,应使用'[]',[]会对括号里的内容进行计算,而点会返回undefined
函数补充

window.unload(无函数名的函数,即匿名函数)
文章参考: www.runoob.com/w3cnote/jav…
补充:
window.onload()
用于在网页加载完毕后立刻执行的操作,即当 HTML 文档加载完毕后,立刻执行某个方法。
JavaScript 中的函数方法需要在 HTML 文档渲染完成后才可以使用,如果没有渲染完成,此时的 DOM 树是不完整的,这样在调用一些 JavaScript 代码时就可能报出"undefined"错误。
注意
- 函数可以调用
- 函数也是对象
- 当变量名与函数名同时设置给某个函数时,舍弃函数名

函数三种定义
字面量定义
- function声明
function 函数名(形参){
函数体
}
- var赋值表达式
var 变量名 = function (形参){
函数体
};
因为是赋值表达式,故函数定义完之后要加分号
构造函数
参考文章:
在Javascript中,用new关键字来调用的函数,称为构造函数
作用: 在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码的复用。
先构建函数:
function 函数名(参数){
this.属性名 = 参数;
}
再使用new对其调用:(使用字符串传递参数)
var 变量名 = new 函数名(实参);
- 当new关键字调用时,会创建一个新的内存空间,标记为该函数的实例
- 函数体内部的this指向该内存
- 执行
- 返回this
关于this: www.cnblogs.com/jiayuexuan/…
区别
使用function声明定义函数时,函数的调用写在定义前后无所谓,但赋值语句中不可写在前方,由于function会进行预解析,在执行语句之前,将var 与 function提取到最前,先行执行。
一般不使用构造函数定义函数,而用他定义对象

调用
匿名函数
匿名函数不要让function开头
- 将调用后的函数赋值给变量
- 在函数前添加!+-等符号
- 给函数整体添加括号括起来
- 在打印台直接使用

递归调用
自己调用自己

方法调用
方法:对象与函数相结合

当命名非法时,使用引号引起来
链式调用:
例:
$('p').html('段落').css('background-color','red')
函数的间接调用

当传入的参数形式为数组时,可以使用apply直接将数组传入,不需要用变量将数组中的值挨个取出再进行传参
可以在继承中使用call和apply,还可以借用其他对象的方法来完成操作,帮助判断一个数据的类型
关于参数
每个函数自带length属性
例: add.length,代表形参的个数
补充:
手动抛出错误:throw new Error('想输入的内容');
arguments
类数组,是一个类似数组的对象
每一个函数都有的,局部的
arguments与形参一一对应
arguments时独立的,每个函数都有属于他的arguments,互相之间没有联系
argument.callee指代函数体本身,严格模式下不允许使用

常用于递归当中

对象作为参数
当传入的参数过多且有顺序时,可以使用对象来作为参数,这样就不用在意形参中的顺序

返回值
- return:一般用于函数末尾,表示最后的返回值,以及提前结束函数
- continue:一般用于循环之中,表示跳出本次循环
- break:用在循环中,表示跳出这个循环
返回值内容
- 什么都不加
- 数字
- 字符串
- null
- 对象,函数