JavaScript 函数

函数

实现 功能 / 效果 的代码块, 就是将需要的程序封装定义在一个函数中, 通过调用函数调用对应的程序.

  • 优点:

        封装定义一次可以多次调用, 减少冗余的代码
        有更好的可操作性和可维护性.
    
  • 特点:

        高内聚低耦合
    
  • 步骤:

         1, 封装定义
           只是在定义函数程序, 没有调用执行函数程序.
    
         2, 调用执行
           函数程序 正式的被调用执行.
    
函数的基本语法:

封装:

         声明式:
           function 函数名称(){}
             function是声明函数的关键词
             函数名称在定义时,定义的函数名称要准守命名规范.
             ()  定义函数的参数
             {}  定义函数的执行程序 及执行结果返回值.

        赋值式: (匿名函数)
           var 变量 = function(){}
              没有函数名称, 使用变量名称作为函数名称.

调用函数:

           声明式函数和赋值式函数,  函数程序调用语法时完全相同的, 
            都是函数名称/变量名称() 
函数的参数
function fun1(num1 , num2=100){
             console.log(num1,num2);
         }

         fun1(456);
         // 运行结果为  456  100

        /*
        定义函数时, 函数()里面定义的变量为形参.
        调用函数时, 定义在函数()中的称为实参, 实参就是给形参赋值的实际数据, 实参给形参赋值式按照顺序一一对应赋值的.
        在定义形参时, 可以同时给形参赋值默认值, 也就是 num2这个形参在声明时, 默认赋值为100
        如果num2没有赋值, 形参num2 存储使用默认值100, 如果num2执行赋值, 形参num2存储赋值的实参数据

        因为实参的赋值顺序, 带有默认值的形参 一般定义在函数参数的末位.
函数的返回值

函数的返回值 (调用的只是变量中的数值, 而不是这个变量)
通过关键词 return 定义的 抛出函数封装之外的数据数值.
没有return定义执行结果返回值的函数, 调用程序执行结果都是undefined

简单的理解 return

          函数() 是在调用执行函数, 可以将函数调用理解为一个表达式的运算, 例如 5+7 , 表达式需要有一个运算/执行 结果12, 
          函数的运算执行结果通过return 来定义的.

为什么要用return ?

        函数中定义的 变量/形参 , 在函数外面不能直接调用.
        只能通过return 这个关键词 将变量/形参/表达式 的数值 作为函数的执行结果返回值 抛出 函数封装之外

        也就是 函数() 调用的执行结果 是return 的数据数值
        可以赋值给变量储存 可以直接输出 可以做需要的操作.

return的作用1
定义函数的执行结果返回值.
return 的作用2:
终止函数程序的执行, return 之后的程序会被 终止不再执行.

通过return将指定的数据 抛出 在函数封装之外, 可以在 函数外部 操作调用 抛出的数据.
因为函数内部定义的 变量/形参 在函数外部不能直接调用, 没有定义return的函数, 执行结果返回值只能是undefined.

函数注释说明

实际项目中所有的自定义函数都必须要写函数注释说明, 所谓的自定义函数就是程序员自己定义的函数程序.

  一般项目中使用
       @param   定义参数的说明
       @return  定义返回值的说明

如下:

  isEven判断偶数
     @param number number  输入的需要判断的数值
     @return boolean  判断输入数据是不是偶数的结果
        判断输入的数据是不是偶数
                    如果是偶数返回值是 true
                    如果不是偶数返回值是 false
JavaScript预解析(预解释/预编译)

JavaScript 是轻量级, 解释型, 弱类型 的脚本语言.
所谓的 预解析/预解释/预编译 是JavaScript程序的一种执行方式 , 在正式执行JavaScript程序之前, JavaScript会先将所有需要执行的JavaScript程序预读一遍 . 对于var 关键词声明定义的变量function关键词声明定义的函数做特殊处理.

  • var声明的关键词 提前调用, 结果是undefined不会报错.
JavaScript预解析执行 先预读所有的JavaScript程序代码, 对于提前调用var声明的变量 这样的操作 ,   
预解析告诉JavaScript有这样的一个变量, 只是当前调用时, 这个变量还没有赋值 ,  执行效果是提前调
用的var声明的变量, 执行结果是undefined.

可以简单粗暴的理解为:

  将var 变量声明的语句提前到 整个程序的起始位置, 
  但是只是声明变量, 没有对变量赋值, 
  等JavaScript程序执行到 正式定义变量的语句时, 再给变量赋值数据.
  • function声明的函数提前调用, 结果是正常执行函数.

     function声明的函数 提前调用, 结果是函数可以正常执行.
    

总结
提前调用var声明的变量, 结果是undefined
提前调用function声明的函数, 结果是正常调用
预解析/预解释/预编译 仅限于一个script标签中.

JavaScript的作用域

JavaScript变量的作用域:

作用域就是作用范围, 也就是变量的使用调用范围.

分类:

          1,
              全局变量/全局作用域变量/公有变量:
                       定义在函数之外的变量称为全局变量
                       任意位置都可以调用函数
                       函数内,函数外都可以调用
          2,
              局部变量 /局部作用域变量/私有变量: 
                       定义在函数之内的变量/形参称为局部变量
                       默认只能在函数内部调用
                       函数外部无法直接调用
变量的调用 , 赋值原则
  • 调用原则

        就近原则
          自己有这个变量, 调用自己的变量.
          自己没有, 调用父级程序的变量.
          父级没有, 再调用全局的变量.
          都没有, 调用报错.
    
          自己有, 但是提前调用, 执行预解析, 调用结果为undefined
    
  • 赋值原则

      就近原则:
              自己有这个变量, 赋值自己的变量.
              自己没有, 赋值父级程序的变量.
              父级没有, 再赋值全局的变量.
              都没有, 赋值语句升级为声明变量语句,
              会在变量中声明一个 全局作用域 可以在函数外调用使用这个变量
              (但是变量赋值没有赋值对象这样的操作禁止产生.)
    
数据存储的基本原理

在内存中有两个存储区域 存储数据(栈 堆)

     栈:
          存储 *基本数据类型*
             (布尔 数值 字符串 undefined null)
          
          是有序存储数据, 
             先定义的数据存储在栈的下方
             后定义的数据存储在栈的上方
        
          是变量中 直接存储数据数值的.
             
     堆:
         存储  *引用数据类型*
          (函数 数组 对象)   
         是无序存储数据:
         就是在堆中开辟一个独立的存储空间 准备存储引用数据类型的数据, 
         操作系统会给这个存储空间分配一个独立的空间,
        (引用数据类型 变量/函数名称 存储在栈中, 其中 存储的是存储空间的 内存地址.)
JavaScript函数基本执行步骤
   封装
          1,在内存的堆中开辟一个独立的存储空间 , 准备存储函数程序 , 操作系统给这个存储空间分配一个内存地址
          2,将函数程序以字符串形式将函数程序代码存储在存储空间中
          3,将变量/函数名称存储在内存的栈中, 变量/函数名称中存储的是函数程序的内存地址
      调用
          1,读取栈中变量/函数名称中存储内存地址 , 通过内存地址找到堆中对应的存储空间, 调用其中存储的程序代码
          2,给函数的形参赋值实参
          3,对函数中的JavaScript程序执行 预解析/预编译/预解释
          4,正式执行函数程序.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值