vue函数如何调用其他函数?_编程|如何简单理解函数的传参、返回、调用

1 函数内部变量的局部性

在一个函数中定义的变量(包括实参),其作用域仅限于定义它的函数中,在其它的函数不能使用,这种变量称为“局部变量”。

局部变量的作用域:函数内部声明和定义的语句块(实参为整个函数),屏蔽语句块外的同名变量;

局部变量的存续期:在函数内部声明开始到语句块结束位置。

定义在函数之外的变量,其作用域范围为定义该变量的程序位置直到程序的结束,在其它的函数中,既可以使用该变量的值,对变量值的改变也在该变量的全部作用域范围内有效,这种变量称为“全局变量”。

2 清晰了解函数的调用、返回机制和流程

函数可以嵌套调用(不能嵌套定义),函数内部以return返回:

f7836ec45286593edd948b37d1638874.png

函数也可以递归调用(类似于嵌套调用):

对于递归调用,可以理解为函数体副本机制为n份,其实只有一份,只是局部变量和参数及返回位置在栈中有函数桢的副本。

c4bbc6c7171be8a5ae3c4607096e457e.png

3 函数调用是函数抽取的逆操作

我们在写代码时,当发现有一块可以利用的完成某一功能的代码时,便可将其封装成一个函数,且通过设置参数和适当的return方式让其在调用时更有一般性或通用性。我们想简单理解函数的传参、返回、调用,反过来,便可以想像将一个函数的函数体如何插回调用的位置(函数调用的实质也可以想像为函数体在调入点的插入)。

正如带参数的封装不会只是加一个函数体那么简单,插回肯定也不只是函数体复制回那么简单。

形参:左值,实参:右值,如:

int v =vp=vf=11;传值:f(int n =v)传指针:f(int* p = &vp)传引用:f(int& f = vf)在函数体中,函数体中的左值使用上述引用中的左值,函数体中的右值使用对应的右值。

想像一下,如果是值传递,或用const修饰的指针或引用传递,当时函数封装肯定考虑的是调用函数与封装函数相互之间的独立性,怎样将函数体插回呢?函数体中的变量参数如果用做左值时,则左值用形参,右值表达式中用右值即可,通过副本机制,可以达到不同的存储空间相互不受影响。

如果是指针传递呢?函数体中的参数则只需将解引用替换成变量参数即可。

如果是引用传递呢?函数体中的参数可以不做改变,因为引用本身就是一个有常量性质的由编译器实现了自动解引用的特殊指针,性质上像指针(形参),使用上像普通的存储数据值的变量(实参及函数体内的使用)。

对于主调函数,如果将被调函数用在表达式或参数中,利用被调函数的左值代替即可。

理解了上述想法,你就可以更好地理解以下概念了。

3.1 参数的输入性与输出性

一般而言,可以用过传址(包括指针、引用传递)实现输出性,输入性与输出性也可以理解为单向性与双向性,传值只实现了单向的数据输入(读操作),而传址却可以实现对调用函数中局部变量的修改(写操作)。通常,输入参数写在参数列表中的左边,输出参数写在参数列表中的右边。

3.2 副本与副作用

参数与返回值都使用了副本机制,只是传址或地址返回(包括指针和引用)的副本是一个地址,而传值或值返回却是一个临时对象(数据的完整复制)。

这里的副作用还是上述参数的输出性,因为传址,相当于调用函数与被调函数之间有了双向性,有可能完成写(左值更改)操作,也就产生了副作用(好处是函数之间通过这种副作用能形成联系,坏处是函数封装性的一种破坏)。

以上内容也可以总结为调用函数与被调函数之间的关系:

传值:相互之间独立(因为单向性或输入性或只读操作);

传址:相互之间依赖(因为双向性或输出性或可写操作),

3.3 左值与右值

按出现在表达式的位置及是否可以寻址可以将变量和表达式区分左值和右值。

传址的实参必须是变量,而传址的实参可以是左值也可以是右值。

如果是引用返回,函数调用还可以用做左值。

-End-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值