函数可以用来封装代码块来完成特定任务,需要实现对应功能时调用即可,方法一般为定义在对象中的函数,函数实际上也是对象
1.函数声明
function 函数名(形参列表){
函数体
}
2.函数表达式
var 函数名=function(形参列表){
函数体
}
js中想使用一个变量就要给这个变量赋值,函数表达式也如此,调用前先赋值,否则会报错
3.函数内部属性
即只有在函数内部才能访问的属性。this也可以在函数外部使用
arguments:
ECMAScript函数不介意传递参数的个数以及参数类型,因为函数的参数在函数内部用类数组表示,即arguments,它包含传入函数的所有参数。arguments的主要作用就是保存函数参数,它还有一个名为callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数
4.IIFE
立即调用函数表达式,即声明函数的同时立即调用这个函数
for (var i = 0; i < 6; i++) {
// 立即执行函数
(function(j) {
console.log(j);
})(i)
}
//结果为0 1 2 3 4 5
作用:1.页面加载完后只执行一次设置的函数*
2.将设置函数中的变量包裹在局部作用域中,不会泄露成全局变量。
写法:
1.对返回结果不进行处理
(function(形参){
函数体
})(实参);
2.对返回结果不进行处理
(function(形参){ 函数体内容 }(实参));
3.返回的是一个布尔值,然后进行取反
!function(形参){ return true }(实参)
4.对于数字返回的是原来的结果,非数字返回NaN
+function(形参){ return 123 }(实参)
5.对于数字返回的是正负符号相反,非数字返回NaN
-function(形参){ return 123 }(实参)
6.对于数字返回的是正负符号相反再减1,非数字返回-1
~function(形参){ return 123 }(实参)
7.返回的结果是undefined
void function(形参){ 函数体内容 }(实参)
5.作用域
函数作用域:在函数中声明的变量即为局部变量,函数外部不能访问
全局作用域:函数之外声明的变量即为全局变量,函数内部可以访问,当函数嵌套时,内部函数与外部函数的这个变量就组成闭包
作用域链:当寻找自由变量(当前作用域没有定义的变量)通过父级去寻找如果父级还是没有就继续往祖先元素寻找直到找到全局作用域还是没有就放弃,这种一层一层的关系就是作用域链
6.函数的应用
回调函数:主函数的事先做完,回头再调用传进来的那个函数
function A(callback) {
callback();
console.log('我是主函数');
}
//定义回调函数
function B() {
// 模仿延时操作
setTimeout(() => {
console.log('我是回调函数');
}, 3000);
}
//调用主函数,将函数B传进去
A(B);
回调函数一般用在耗时操作上面,因为主函数不用等回调函数执行完就可以先执行自己。例如ajax请求,处理文件等。