JavaScript函数
一、函数的定义
JS中函数的特点:
- 一处定义,处处使用
- 将函数定义在对象内部称为对象的方法
- 函数也是一个对象,可以设置属性与方法
- 每一次调用函数会产生一个this,谁调用的函数this就指向谁
- 在函数中创建的变量为局部变量,在函数调用时声明,在函数调用结束后删除,且只能在函数内部使用,因此可以在不同函数中定义相同名称的变量
- 可以多次调用一个函数为其传递不同参数获得不同结果
- 函数可以用在表达式、计算式等其他地方,都可以得到相应的结果
1、函数声明语句
function name (参数){要执行的代码}
function fun1(){
}//用函数声明语句定义一个函数
- 函数不会执行,只有当调用时才会执行
- 可以不带参数也可以没有返回值,甚至可以没有函数名
function fun1(){
console.log('a');//未调用,不执行
}
function fun2(){
console.log('b');
return 'c';
}
console.log(fun2());//b c
//箭头函数或匿名函数可以不用写函数名
(()=>{
console.log('d');
})()//d
2、函数表达式
var fun = function(参数){要执行的代码};
var fun = function(){
}
- 通过函数表达式创建的函数是一个匿名函数,存储于变量中
- 函数调用时用:变量名()
var fun = function(){
console.log(1);
};
fun();//1
3、Function构造函数
var name = new Function(“参数”, “要执行的代码”);
var fun = new Function("name","return 3");
console.log(fun());//3
- 参数和代码的引号不能掉
- 调用时通过:name()
- 通过构造函数方式定义的函数不能进行递归
4、函数提升
当函数调用在前,定义在后时,就会产生函数提升,函数的提升是直接将整个函数整体提升到作用域的最开始位置,提升后的位置是在变量提升后的位置之后的,
类型 | 提升情况 |
---|---|
变量 | 将变量定义提升到作用域最开始位置,并且只提升定义不提升赋值,但是变量先提升 |
函数 | 将函数整个提升到作用域最开始位置,相当于剪切复制 |
function foo() {
console.log(a);//a(){}
var a = 1;
console.log(a);//1
function a() {
}
console.log(a);//1
}
foo();
注意:
- 只有使用关键字声明的函数和变量才会提升
- 局部变量中的隐式全局变量不会提升
5、自调用函数
在声明函数的同时,对函数进行调用:
( function(){} )()
必须将函数用括号包裹再跟一个调用的括号才可以进行自调用
(function