函数
- 函数作用: 1. 精简代码 2.复用代码
- 函数的思想: 封装
函数的声明语法:function 函数名 ( ) { 函数体 };
封装步骤:
1、 分析有没有相同代码
2、 抽取相同代码,并给一个名字
3、 使用这个名字 == 执行了这段代码
// 调用函数(在前)
sayHi()
function sayHi(){
document.write('hi~~')
}
// 调用函数(在后)
sayHi()
函数注意事项:
- 可以多次调用,直接调用函数名即可。
- 可以在任意时刻掉用(当然前提是已经声明好了)
// 扩展:函数声明的时机,是在 js 刚进入执行环境的时候 (函数声明会提前) (声明时机不是运行到这一行了才声明,不像我们的 let 变量一样)
带参数的函数
可以带多个参数
function 函数名(参数,....,参数){}
function getSum(num1,num2,num3){
document.write(num1 + num2+ num3);
document.write('<br>')
}
getSum(10,10,11);//20
getSum(20,10,11);//30
getSum(30,10,11);//40
带参的函数:形参 和 实参
形参:
声明函数的时候,在小括号内部定义的变量
function getSum(num1,num2){}
实际执行效果,相当于声明了变量
变量声明了,但没赋值: 默认值为undefined
let num1
let num2
实参:
// 实参:函数执行的时候,在小括号内部传递的数据
// 相当于:执行了赋值操作
// num1 = 20
// num2 = 50
getSum(20,50)
参数默认值
逻辑中断: 逻辑或的技巧: 取默认值
// 1.当y没传实参时,默认值为 undefined
// 2. undefined || 0 ; 前为逻辑假,返回后面的值 0
// 3. 相当于 y = 0 ; 设置了默认值
x = x || 0;
y = y || 0;
document.write(x + y);//1+0=1
}
getSum(1);//y没传实参默认值为
函数的返回值
当函数需要返回数据出去时,用return(数据)关键字
// 语法:
function getSunm(x,y){
// 函数专注于运行过程的;结果如何处理,不是函数的职责
//
return x + y
}
// 函数内部,使用了return,返回了值
let num = getSunm(10,30);
// 之后如何处理结果,就由外界自己定了
alert(num);
document.write(num);
document.write(num);
作用域
一、作用域
1.全局作用域:scropt顶层范围
全局变量:可访问范围:定义之后的任意位置,都能访问
二、局部作用域(函数作用域):存在于函数内部
局部变量
三、块级作用域:if语句和for语句里面的{ }等
块级变量
作用域链
1、只要是代码,就至少有一个作用域/
2、如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域/
3、查找变量的步骤,就是沿着一个个的作用域向上查找的(可以通过控制台debugger中的scope选项卡查看)/
4、用链式方式查找数据,途径了一个个作用域,以此构成了作用域链
匿名函数使用场景
匿名函数:

匿名函数语法.png
立即执行函数

立即执行函数.png