1.为什么需要函数
2.函数使用
3.函数传参
4.函数返回值
5.作用域
6.匿名函数
函数魅力:代码复用
一、为什么需要函数
1.函数:function,执行特定任务的代码块。
2.说明:
函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,优势:有利于精简代码方便复用。
比如alert()、prompt()和console.log()都是一些js函数,属于已经封装好,可以直接拿来用。
二、函数使用
1.函数的声明语法
function 函数名(){
函数体
}
例如:
function sayHi(){
document.wirte('hai~~')
}
函数名命名规范:
*和变量命名基本一致
*尽量驼峰式命名法
*前缀应该为动词
*命名建议:常用动词约定
2.函数的使用
语法:
function 函数名(){
函数体
}
函数名()
//求1-100累加和
function getSum(){
let sum = 0;
for(let i=1;i<=100;i++){
sum+=i;
}
console.log(sum);
}
getSum();
三、函数传参
1.语法:
function 函数名(参数列表){
函数体
}
function getSquare(num1){
document.write(num1*num1);
}
function getSquare(num1,num2){
document.write(num1+num2);
}
function getSum(start,end){
let sum = 0;
for(let i=start;i<=end;i++){
sum+=i;
}
console.log(sum);
}
getSum(1,50);//1275
2.参数默认值
2.1.形参:可以看做变量,但是如果一个变量不给值,默认是什么?
undefined
2.2.不输入实参,则出现undefined+undefined结果是什么?
NaN
2.3.我们可以改进下,用户不输入实参,可以给形参默认值,可以默认为0
function getSum(x=0,y=0){
document.write(x+y);
}
getSum()//结果是0,而不是N
getSum(1,2)//结果是3
ps小提示:
这个默认值只会在缺少实参参数传递时才会被执行,所以有参数会优先执行传递过来的实参,否则默认为undefined
四、函数返回值
1.在函数体中使用return关键字能将内部的执行结果交给函数外部使用。
function getTotalPrice(x,y){
return x+y;
}
let sum = getTotalPrice(1,2)
console.log(sum);//3
- return后面代码不会再被执行,会立即结束当前函数(因此return后面的数据不要换行写)
3.函数可以没有return,这种情况函数默认返回值为undefined。
function fn(){
}
let re = fn()
console.log(re)//undefined
4.返回最大值和最小值
function getArrValue(arr = []){
let max = arr[0];
let min = arr[0];
for(let i=1;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
}
if(min>arr[i]){
min = arr[i];
}
}
return [max,min];
}
let newArr = getArrValue([1,3,5,7,9]);
console.log(`数组的最大值是:${newArr[0]}`);//9
console.log(`数组的最小值是:${newArr[1]}`);//1
五、作用域
1.全局作用域(全局有效)
作用于所有代码执行的环境(整个script标签内部)或者一个独立的js文件。
2.局部作用域(局部有效)
作用于函数内的代码环境,就是局部作用域。因为跟函数有关系,所以也称为函数作用域。
let num = 10;//全局变量
console.log(num)
function fn(){
console.log(num);
}
fn()
function fun(){
//局部变量
let str = 'pink';
}
console.log(str)//错误
3.易错点:
//1.如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
let num = 20;
function fn(){
num = 10;//全局变量来看,强烈不允许
}
fn()
console.log(num);//10
//2.但是有一种情况,函数内部的形参可以看做是局部变量
function fun(x,y){
//形参可以看作是函数的局部变量
console.log(x)
}
fun(1,2)
console.log(x);//error
4.变量访问原则:
4.1只要是代码,就至少有一个作用域
4.2写在函数内部的局部作用域
4.3如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
4.4访问原则:
在能够访问到的情况下:先局部,局部没有在找全局。(就近原则)
六、匿名函数
1.函数表达式:
将匿名函数赋值给一个变量,并且通过变量名称进行调用,我们将这个称为函数表达式
语法:
let fn = function(){
//函数体
}
调用:
fn()
2.立即执行函数
场景:避免全局变量之间的污染
语法:
//方法1:
(function(){
console.log(11);
})();
//方法2:
(function(){
console.log(11);
}());
//不需要调用,立即执行
1.立即执行函数有什么作用?
防止变量污染
2.立即执行函数需要调用吗?有什么注意事项?
*无需调用,立即执行,其实本质已经调用了
*多个立即执行函数之间用分号隔开