js函数的基础(上)

函数的概念:具备某个功能的工具,完成某个功能的代码,像是系统自带的有:isNaN(),parseInt()等等,但是今天要学的是自定义函数

语法:function 函数名(){

            代码段

}

函数的调用: 函数名()

这样我们以后还要执行函数中的代码时候,直接调用就可以了


 函数定义的本质,就是在内存中开辟一个空间,这个空间名就是函数名,空间值就是代码段 


带参函数 :当函数代码中的某些数据在调用中发生变化,就需要将这个数据当做变量放在函数名旁边的小括号中,而这部分叫做形参,当函数调用时,给小括号的变量赋值时,叫做实参

function zizeng(a){  // 叫做形参 - 形式上的参数
    var b = a + 1;
    console.log(b);
}

zizeng(1)//实参

 不给形参赋值,默认值是undefined


赋值式函数:将一个函数被赋值给一个变量,此时这个函数的名称就没有用了,可以被省略

 var hanshu = function () {   

var a = 1   

var b = 2   

var c = a + b

    console.log(c);

 }

hanshu()

变成赋值函数,函数名称就不能再使用了,但此时还是可以调用

变量类型是function,值就是函数代码


 匿名函数

没有函数名称的叫做匿名函数

 var hanshu = function() {

   var a = 1

   var b = 2

   var c = a + b

   console.log(c);

 }

 注意事项

匿名函数不能单独出现,除非整个用括号包起来,或者在函数前面添加 !/ ~

(function(){

    console.log(11);

 })

在此基础上,在匿名函数后面另外添加一个小括号,等于这个函数被调用了,不过这个函数只能被调用一次---自调用函数

(function(){

    console.log('这是fn函数');

}) ()


带返回值的函数 return

让调用函数的代码变成一个具体的值,return后面的代码不再执行,如果return后面没有值,默认值时undefined

function fn(n) {

    var k = 0

    for(var i=1; i<=n; i++) {

        if(i % 2 === 0) {

            k++

        }

    }

    // console.log(k);

    return k

}

console.log(fn(10));

function add(a, b) {

    return a+b

}

console.log( '1+2='+add(1,2) );

 return只能返回一个值

案例: function add(a, b, c) {

       var sum1 = a + b //sum1 = 4

       var sum2 = a + c //sum2 = 6

        var sum3 = b + c //sum3 = 8

       return sum1, sum2, sum3 }

var d = add(1, 3, 5)

console.log(d); // 8

默认返回一个且为最后一个值


 预解析

  1. 预解析js代码

    预解析的过程,就是查找代码中的var和function这两个关键字,找到以后,将变量和函数提前存到内存中,并给他们赋一个初始值,变量的初始值为undefined,函数的初始值为代码段。

  2. 开始按顺序一行一行解读代码

    解读代码的时候,会略过变量和函数的定义,因为变量和函数的定义已经提前放在内存中了,提前储存的变量和函数的值会随着代码的解读而发生变化,也就是变量的赋值和函数的调用。

预解析分为变量的预解析和函数的预解析,也就是代码在执行之前先进行解析,将变量和函数的定义放在内存中。

注意被赋值函数的变量,之后在赋值其他数据后,用调用函数是用不出来的

预解析总结:

  1. 匿名函数赋值给变量的定义方式,预解析时遵循变量的预解析规则,不会将函数代码预解析

  2. 预解析的时候,会将定义提前放在内存中,不会提前将赋值放在内存中

  3. 如果变量名和函数名同名了,保留函数预解析,忽略变量预解析

    因为函数预解析其实包含了赋值的过程,函数定义放在内存中的时候将函数的代码也放在内存中

    变量的预解析只有空间,没有值,所以如果是先预解析变量,那后面的函数预解析赋值就将空间中放入了值,如果是先预解析的函数,再次预解析变量的时候,空间已经存在了,再次定义空间也是没有意义的。

  4. 省略var定义的变量是不会有预解析的

  5. js代码如果报错了,那后面的代码就不会执行了

  6. 不会执行的代码中有变量或函数定义也会预解析,因为预解析在执行之前。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值