js学习第五篇:javaScript函数、作用域和变量

十一、函数

1.函数的概念

避免代码冗余,将相同功能的代码包装为函数。

函数:就是封装了一段可重复执行的代码块

1677568789299

2.函数声明方式-两种
(1)调用函数关键字
function fn(形参名1,形参名2...){
 //函数体
}
fn()//调用
(2)利用函数表达式
  • 同时此时函数并没有名字,fun只是他一个变量名
  • 此时变量里面存的是函数
var fun = function(形参名1,形参名2...){
//函数体
} 
fun()//调用
3.函数使用
(1)声明函数--无参
  • 声明函数关键字:funciton
  • 函数名一般为动词,如:getNum()
  • 声明时函数不会执行,调用时函数才会执行
function 函数名( ){
   //函数体
}
(2)调用函数-无参
函数名(参数);

1677563142608

3.函数的封装

函数的封装:把一个或多个功能通过函数的方式封装起来,对外提供一个简单的接口。

4.函数的参数

参数可有有无,同时个数不限

【作用】:可支持函数传入不同的参数,执行不同计算。

(1)声明函数-带参
function 函数名(形参名1,形参名2....){
  //函数体
}
(2)调用函数-带参
函数名 (实参1,实参2...)
4.1形参和实参
  • 形参:形式上的参数---声明函数的小括号
  • 实参:实际上的参数---函数调用时传入的参数

1677563741804

4.2形参和实参个数不匹配

1️⃣实参 = 形参,则输出结果正常。

1677564278213

2️⃣实参 > 形参,则参数个数看形参。

1677564284542

3️⃣实参<形参,则多余的形参默认为undefined,最终结果是NaN。

  • 因而计算的结果是NaN(非数值形)

    1677564797203

    1677564927375

5.return
(1)函数返回值

使用return将函数执行的值返回给调用者。

function 函数名(){
   //函数体
   return 需要返回的结果;
}
(2)终止函数
  • 执行return后,该函数会被终止,所以return后的语句不再执行。
(3)❗注意事项
return只能返回一个值

1️⃣如果使用return返回两个值,会返回最后的值

  • 所以返回多个值,可以用数组存储
如:
function getResult(num1,num2){
 return [num1+num2,num1-num2];//返回为数组
} 

2️⃣函数没有return会返回undefined

1677568515018

6.break、continue、return的区别
  • break:结束当前循环体
  • continue:跳出本次循环,继续执行下次循环
  • return:不仅退出循环,还能返回return的值,还可以结束当前函数
7.函数相互调用
  • 函数可以相互调用,同时函数顺序不影响

如:

f1()调用了f2(),但是调用时,f2()还未执行。

1677578377456

十二、arguments的使用

-不确定形参个数时

【解决】:不确定传入的实参数量

【本质】:当前函数的内置对象,存储了传递过来的所有实参。

​ (即每个函数都有!!!!)

(1)arguments是一个伪数组
  • 具有length属性
  • 按索引方式储存数组
  • 不具有数据的push,pop方法
function 函数名(不写形参){
          //arguments包含所有传来的形参
          //使用arguments来获取传入的形参
}

1677569913764

十三、作用域

变量在某个范围内起作用和效果

  • 提升可靠性
  • 减少命名冲突
(1)全局作用域

在整个script标签中,或单独js文件中

(2)局部作用域

在函数内部:该变量名只在函数内部起作用

1677579311314

(3)全局变量

1️⃣在全局作用域下的变量

2️⃣在函数内部未声明直接赋值的变量

  • 全局变量,当浏览器关闭时才会销毁,比较占资源
  • 全局变量,在任何位置都能用(但注意就近原则)
function test(){
    num = 10;//这是全局变量,因为只赋值,未声明
}
(4)局部变量

1️⃣在局部作用域下的变量:函数中的

2️⃣函数的形参

  • 局部变量,当程序执行完毕就会销毁
  • 局部变量,只能在函数内使用
(5)块级作用域

js在es6时新增了块级作用域,原先并没有

  • 即如今js中,{ }这类代码中的变量在任何位置都能使用
for(3>5){
   var num = 10; 
}
alert(num)//虽然将块代码中的变量,放在全局输出,但并不会报错,因为没有作用域。

十四、作用域链

两个函数嵌套时**,内部函数可以访问外部函数**的变量

1677581141693

十五、代码执行规则

JS代码是通过JavaScript解析器来执行的,具体分为两步:预解析代码执行,执行规则如下:

1️⃣js引擎首先将所有varfunction提升到当前作用域的最前面。----代码解析

2️⃣再按照代码书写顺序,从上往下执行---代码执行

(1)预解析

分为变量预解析(变量提升)和函数预解析(函数提升)

  • ①变量提升就是将变量声明提升到当前作用域最前面,而不提升赋值操作。
    • 当前作用域:全局作用域/局部作用域
        /*1.报错*/
        console.log(num);
------------------------------------------------------
        /*2.num为undefined*/
        console.log(num);
        var num = 10;
相当于:
        var num;
        console.log(num);
         num = 10;
-------------------------------------------------------
       /*4.在声明前调用报错*/
        fun();//报错
        var num = function(){
            console.log(22);
        }
相当于:
        var num;
        fun();
        num = function(){
            console.log(22);
        }
②函数提升就是将函数声明提到作用域最前面,不调用函数
 /*3.在声明前、后,调用都可*/
        fn()//调用成功 输出11
        function fn(){
            console.log(11);
        }
        fn();//调用成功 输出11
相当于:
      function fn(){
          console.log(11);
      }
      fn();
      fn();  
(2)代码解析

预解析后,按从上到下的顺序执行。

(3)案例
  • 最终结果:undefined,因为函数里和函数外的变量都要提升作用域,但不赋值

1677755482722

1677756150502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓六日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值