JavaScript函数定义和预解析

1、函数定义和调用

(1)函数定义两种方法:声明式、赋值式

代码:

 文字描述:

声明式:function 函数名(){要执行的代码}

赋值式:var 函数名=function(){要执行的代码}

(2)函数调用:

单单定义是没有用的,需要调用代码才能执行,函数调用的格式是:

函数名+():text1()

(3)函数定义声明式和赋值式的区别:

区别1:声明式可以先调用再定义,就是调用的代码可以写在定义的前面(当然更可以先定义再调用);但是赋值式就只能先定义再调用;

2、参数:实参、形参

函数定义:function 函数名(形参){要执行的代码}

函数调用:函数名(实参)

3、return返回值

代码:

 结果:60

代码说明:函数调用后,如果你在函数后面加上了一个return,则这个函数将来会返回一个值给text1(30),也就是说函数执行完以后text1(30)=result。

注意:这个return加不加看需求,如果需要用到函数执行完的结果参与函数外的运算,就要写return,把返回的值接收出来,参与下一步的运算。

return的特殊用法:

代码:

return是不能代替break单独在for循环里面用的,但是如果for循环外面包裹一层function函数,return就可以在for里面用,在for里面用不仅打断了for循环使得return下面的代码执行不了,而且function函数也直接结束了。

4、代码预解析(又叫做:变量声明提升)

js是一个解释型语言,就是在代码执行之前,先对代码进行通读和解释,然后再执行代码,也就是说,对于js代码来讲,是先解析代码,然后再执行代码。(这里的解析代码就像是写作文先列大纲一样,解析代码只是了解了一个代码大致的内容,具体的内容还需要执行代码)。

预解析的原理:

预解析会将你声明的变量或者函数放在最前面来(指的是script里代码的最前面),然后再执行下面的代码,看效果如下所示:代码1

 结果:

看代码,我们将console.log(myname)放在var定义变量前面去写,结果是第一个值undefined,是不是会觉得正常,那我们现在将这个myname换成myage,看看效果:代码2

 结果:

结果直接出错了,那为什么上面那个输出myname的不出错了,而是输出的是undefined,这就是因为预解析的原因。上面那个在定义myname之前输出myname,因为代码会预解析,预解析会将你全部定义的变量提到代码的最前面去,然后再执行下面的代码,所以代码1红色框里面输出的结果是undefined,而代码2,因为myage都没有定义,所以会出错,也就是预解析的原理。

当函数名和变量名冲突时的预解析:

预解析会将变量声明给提到最前面去,但只是提var age,后面的age=100这个不提,但是整个函数都会给你提到前面去,所以这个代码执行顺序其实是:图示

 所以最后的结果等于100,,,

此时如果你调用函数:图示:

结果就会报错,如下图:因为预解析代码执行顺序是上面那样的,最后执行得代码是age=100,明显age不是一个函数,

出错结果如果出现上面这样子,就是说明你变量名和函数名冲突了,你就需要去找找哪里冲突了就行。

但是如果你要是将函数调用放在定义变量之前,结果就对了:

 结果是:age is 100

注意:变量和函数提升跨不了script标签,当有多个script时,只能提升到当前script标签的最上面。

5、作用域

在js中只有函数能生成一个局部作用域,别的都不行,,,别的都是全局作用域,函数本身也是全局作用域,函数里面定义的东西是局部作用域。。

6、变量访问规则:就近原则;赋值规则

 代码演示:

注意:

(1)js中函数里面可以嵌套函数; 

(2)函数里面的fun()函数也要调用,不调用的话当fn()函数执行完,执行function fun()但是只执行到这里(函数定义),里面的代码不执行,当调用了函数以后,才能执行代码;

赋值规则: 视频讲解见:5:33---10:23 链接:041-作用域-2_哔哩哔哩_bilibili

 代码:

因为赋值规则的出现,当我们给一个变量赋上值,它会去找这个变量是在哪里定义的,然后再改变那个变量的值,我们可以运用这个思路去看上面的代码,不写return函数返回值时,看函数里结果怎么拿出来用:因为我们函数里面没有定义result这个变量,只是给这个result赋了值,那这个result就要去找这个变量是在哪里定义的,发现在函数外定义的,那么就是函数外这个result结果就是a+b后的值了,也就是3,然后我们再console.log(result)在控制台上打印这个值,这就是当函数不写return返回值的时候,我们也可以用这个在函数外定义变量,在函数内赋值的办法。(重点:就是这个变量不要在函数内定义即可,在函数外定义)这就是将改变作用域的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陌依依

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值