函数是什么?
函数指的是一段代码,这段代码定义一次可以调用多次
函数是javascript中一种特殊的对象,函数也是对象有自己的方法和属性
注意:函数不调用就不会执行
函数的语法:(带参数的函数,不带参数的函数)
不带参数的函数:
编写格式:
function 函数名{ 函数体(要执行的操作)
}
带参数的函数:
function (这里边写参数) { 函数体(要执行的操作) }
函数的定义:(函数声明语句,函数表达式)
编写格式:
函数声明语句:
function 函数名{ 函数体(要执行的操作)
}
函数表达式:
var 变量名(也等于函数的名字)=function(这里边写参数){ 函数体(要执行的操作)
}
函数声明语句和函数表达式的区别?
使用函数声明语句定义的函数可以在任何地方调用,使用函数表达式定义的函数,调用只能用在定义的函数之前,调用再函数之前会报错。
函数的参数问题:
在定义函数时如果有多个参数参数之间要用逗号分隔,在函数定义的参数叫形参,在函数调用的时候的参数叫实参。当实参比形参少的受多余的形参会是undeFinde,当实参等于形参时会对应赋值,当实参多于形参时多余的实参会被忽略掉。(函数中会有一个伪数组arguments,这个argumens是保存实参的)
使用函数的返回值:return
如果函数体外面要使用函数的返回值,可以使用return。在函数中return之后的代码不再执行。如果没有明确的返回值,并且在某个时间想让函数停止,可以使用return。
编写格式:
function 函数名 (这里边写参数){ 函数体(要执行的操作) return }
函数的特殊用途: (递归函数和自执行函数)
递归函数:(自身调用自身,有结束条件)
编写格式:
function 函数名(这里边写参数) {
if (参数<=1){ return 1
}else{
return 参数*函数名(参数-1) }
}
自执行函数:(不用调用,自己执行)
编写格式1:
function 函数名(参数) {
函数体(要执行的操作)
}
编写格式2:
(函数 (参数){ 函数体(要执行的操作) })(参数值)
函数的调用(函数的调用有四种方式,先之讲作为函数这一种)
调用方法:函数名(参数值);
函数的作用域:(作用域就是函数与变量可访问的范围)
全局作用域:
最外层的函数和最外层函数外面的变量拥有全局作用域
没有使用var声明的变量拥有全局作用域(这种方式不建议在程序中使用)
window上的属性和方法都具有全局作用域
局部作用域:(和全局作用域相反,只在固定的代码片段中访问)
变量声明:把变量声明提前到当前作用域的最上面然后再原来的位置赋值
如果全局变量和局部变量的名字相同那么优先使用局部变量
函数的封装:(就是一个提取参数的过程)
把语句放在函数里边然后调用这个函数
arguments属性:
用于存放实参,本质上不是一个数组是一个伪数组有长度
函数中的this :
this在普通函数中指向的是window,this在事件中只想的是发生事件的DOM对象
call方法和apply方法:
call方法和apply方法是函数身上的方法,作用是用来改变函数中this的指向的。两者的区别是传参数的方式不同,在使用call和apply时如果括号里没有参数那么this默认只想window对象
call方法:
使用方法:要改变this指向函数的函数名.call(x,y,z)x是想要让this指向哪个函数的函数名,剩下的是要往函数里传的参数
apply方法:
使用方法:要改变this指向函数的函数名.apply(x,[q.b.j])x是想要让this指向哪个函数的函数名,剩下的是要往函数里传的参数只不过是一个数组数组里边可以有多个不过只能有一个数组
构造函数:
- 构造函数还是普通的函数。
- 有一条不成文的规定:构造函数的首字母大写,例如:
普通函数命名: function abc(){函数体}
构造函数命名:function Abc(){函数体}
-
在函数体内声明变量时不再使用var而是使用this,例如:
普通函数声明变量: var str=123
构造函数声明变量:this.str=123
- this指向当前函数的实例对象,不再是window
-
调用构造函数的时候要在前边加上new。例如:
普通函数调用:abc()
构造函数调用:new Abc()
构造函数的返回值:
- 没有设置返回值:返回this
- 返回值是基本类型的,五种原始类型
- 返回值是数组类型的:数组,对象
返回值如果是基本类型的那么返回值会被抛弃,如果返回值是引用类型的话,返回值将会被替代被返回出的值替代