函数简介
- 概述:将一个常用功能进行封装,当你想使用时,可以选择调用,执行。
- 注意:JavaScript脚本语言当中,函数分为两种:一种关键字function定义函数、表达式形式函数。
- 函数使用分为两部分:声明、调用
2、关键字函数
//声明部分
function name(){
语句;
}
//调用部分
fun();
- 函数在JS当中属于Object引用类型数据,不是Function类型的【因为JS语言当中没有这个类型】
3、形参与实参
-
形参:在函数声明的时候,声明部分的小括号里面可以书写形参。形参是变量,(只不过不需要用关键字var进行声明)
-
实参:在函数调用的时候,调用时候传递数据称之为实参。l实参可以是任意类型数据。
-
形参个数,不能决定实参个数。实参个数,也不能决定形参个数。
4、变量认知
-
变量:在JS当中变量分为两种:局部变量、全局变量。
-
局部变量:在JS当中局部变量,只有两种情况:①作为函数形参 ②变量在函数体中声明
-
同C
5、作用域(scope)
-
概述:作用域:可以理解为是书写代码的范围。
-
全局作用域:书写JS代码范围最大的两个script标签之间。
-
函数的作用域:即为函数体
<script type="text/javascript">
//全局变量
var count = 666;
function fun (){
console.log(count);
}
fun();
</script>
# 由于函数作用域没有局部变量count,因此会沿着作用域练向上查找(等等,我找找我家老大看看他有没有)
# 一看全局作用于中有全局变量count,因此函数作用域‘借来’使用一下。
5.1 面试题
var num = 66;
function fun (){
console.log(num);//undefined
var num = 99;
}
// 在JS当中任何语句都阻挡不了变量声明部分提升。
// 会提升到当前作用域最上方。
6、不同函数定义方式的区别
概述:在JS当中函数有两种形式:
-
第一种: 关键字function定义的函数。
-
第二种:表达式形式函数,就是讲关键字function定义的函数赋值给变量形式。
-
var jch = function () { console.log("我爱你塞北的大学呀"); }
-
-
将关键字function定义函数赋值给变量,这种形式的函数【称之为表达式形式函数】
-
表达式形式函数中省略关键字形式函数名字【匿名函数】
-
var jch = function () { console.log("我爱你塞北的大学呀");
-
7、表达式形式函数与关键字函数区别
- 关键字形式函数可以在声明之前、声明之后调用。
- 由于解析器,可以将关键字形式函数声明部分提升到当前作用域最上方。
- 表达式形式函数:只能在声明之后才可以调用。
- 表达式形式函数:由于变量声明部分提升(提升到当前作用域最上方)
8、回调函数
callback:回调函数
概述:当一个函数执行的时候,传递实参是另外一个函数声明部分。这个实参(函数)即为回调函数。
function promise (a,b,callback){
callback();}
promise(1,"我爱你塞北的血",function(){})
- 当某一个函数执行的时候,传递实参是另外一个函数声明部分,这个实参的函数即为回调函数。
- 回调传递的是匿名函数的值
9、递归
function add (){
add ();
}
//函数自己调用自己
10.IIFE 函数自执行
10.1 函数立执行
概述:IIFE,在声明表达式形式函数的同时立刻马上执行一次。
var fun = function (){
console.log('我执行了')}
function sum () {console.log('我是关键字形式函数;}
- IIFE:在表达式形式函数声明同时立刻执行一次。所谓‘IIFE’
10.2 IIFE其他形式写法
概述: 关键字形式函数后面不能紧随小括号立即执行。但是程序员可以通过一些手段,将关键字形式函数变为表达式形式函数。
+function(){
console.log("+号可以将关键字函数变为表达式形式函数");
}();
-function(){
console.log("-号可以将关键字函数变为表达式形式函数");
}();
!function(){
console.log("!号可以将关键字函数变为表达式形式函数");
}();
(function(){
console.log("小括号号可以将关键字函数变为表达式形式函数");
})();
-
加、减、非、小括号:可以将关键字形式函数变为表达式形式函数,立即执行一次(IIFE)
-
每个IIFE都有自己独立的作用域,且互不影响。