1.如何定义一个函数
1.1定义具名函数
function 函数名(形式参数1 形式参数2){
语句
return 返回值
}
1.2定义匿名函数
上面的具名函数去掉函数名就是匿名函数
let a =function(x,y){
return x+y
}
1.3定义箭头函数(三种表达式)
第一种
let f1 = x =>x*x
console.log(f1(9))//81
第二种
let f2=(x,y)=>x.y
console.log(8,9)//72
第三种
let f3=(x,y)=>{
console.log('hi')
return x+y
}
注意事项如果后面有两句话需要用上花括号 写return返回 函数不知道能返回什么
2.函数的调用时机
函数的调用时机不同结果也会不同,我们可以来看下下面几个例子
let a = 1
function fn(){
console.log(a)
}//打印不知 因为没有调用函数
图片.png
let a = 1
function fn(){
console.log(a)
}
fn()//打印为1
let a = 1
function fn(){
console.log(a)
}
a = 2
fn()//2
let a = 1
function fn(){
console.log(a)
}
fn()//1
a = 2
从以上的例子我们可以知道函数的调用时机不同,函数的值也不同,这就和刻舟求剑一样。
3.函数的作用域
3.1函数作用域的定义
每个函数都会默认创建一个作用域,我们首先也通过几个例子来进行理解.
function fn(){
let a = 1
}
console.log(a) // a,这里不能打印出1,因为a=1在函数里面,函数没有执行,就算执行也是访问不到的
3.2全局变量和局部变量定义
在顶级作用域和window是全局变量,其他的都是局部变量.window不一定放在外面.比如
function f1(){
window.c=2
}
f1()
function f2(){
console.log(c)
}
f2()//2
image.png
3.3作用域规则
1.如果有多个作用域都为同名的变量a,那么向上取最近的作用域
2.查找作用域与函数执行无关
function f1(){
let a = 1
function f2(){
let a = 2
function f3(){
console.log(a)
}
a = 22
f3()
}
console.log(a)
a = 100
f2()
}
f1()1 22
image.png
4.闭包
如果一个函数用到了函数和外部的变量就叫做闭包,后面用法还会详细再讲.
5.形式参数
形式参数就是非实际参数,比如
function add(x,y){
return x+y
}//x和y就是形式参数,add(1,2)传参数的时候x和y的值被复制了一份,这个就是实际参数
6.返回值
只有函数才有返回值,每个函数都有返回值
function hi(){
return console.log('hi')
}
hi()//返回值为undefined
7.调用栈
7.1调用栈的定义
JS引擎在调用一个函数的时候前,需要把一个函数的环境push到一个数组里面,这个数组就是调用栈,等函数执行完就会跳出这个环境.
image.png
8.函数提升
add(1,2)
function add(x,y){
return x+y
}//3 率先加载
本文先说到这里,下次有机会在写一下this和arguments.
本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源.
网友评论