JavaScript学习笔记——函数

通过将大段的代码重构(refactor)为一系列函数,可以在不改变代码功能的情况下,重新组织代码,使其更易于理解和维护
用函数封装代码块,每个函数只做一件事,并把这件事做好,可重用性更高

在函数内部声明的变量是局部变量,在函数外声明的变量是全局变量

全局变量的寿命:与网页一样长(重新加载网页,将销毁并重新创建所有全局变量)
局部变量的寿命:与使用该局部变量的函数一样长(局部变量在函数结束后消失)

函数内的局部变量与全局变量同名局部变量遮住(Shadow)全局变量
函数内如果没有与全局变量同名,则可以在函数内修改该全部变量

注意,同一网页中的多个JavaScript文件只有一个全局作用域(每个JavaScript文件创建的全局变量都位于同一空间内),全局变量是互通的,这可能导致难以跟踪全局变量的使用位置,进而导致bug

JavaScript对代码结构要求不严,无需规划就可直接编写代码
这也许是好事,但对于需要长期维护和修改的重要代码,这样做的缺点就暴露出来了
因此,常有人抱怨JavaScript过度使用全局变量

因此,对于复杂的需要长期维护的代码,不要大量创建全局变量,而是尽可能地使用局部变量

自定义一个函数

function 函数名( 形参(可能没有)){
函数体
return 返回值;
}

调用函数时,先计算上面括号内的表达式的值(字符串/数字/true/false等),再将结果作为传递给函数的值,称为实参

向函数传递参数

JavaScript按值传递实参(pass-by-value),把每个实参的值复制形参,即向函数传递了实参的副本
在函数进行处理时,只会影响形参,不会影响实参
也就是说在函数中处理形参时,其影响范围仅限于函数内部

形参可以视为局部变量

注意:也有例外——实参为对象变量的情况

基本类型的变量(数字、字符串等)存储的是实际值
对象变量存储的是指向对象的引用,而非对象本身
实参为基本类型变量,则传入[变量]的副本,函数中的操作不改变原始变量
实参为对象变量,传入[指向该对象的引用]的副本,函数直接修改原始对象

形参(局部变量)与实参同名,结果如何?

函数执行时,形参x(局部变量)将遮住实参x
(实参可能为全局变量,也可能是另一函数的局部变量)
两个x互不影响

function addOne(x){
	x=x+1;
}
var x=1;
addOne(x);//执行完毕后,x的值仍为1
传入的实参不够,结果如何?

没有传入的实参,其对应的形参将被设置为undefined,函数正常运行

传入的实参过多,结果如何?

JavaScript将忽略多余的实参

没有“形参”的函数?

很多函数没有形参
例如Math.random()的括号中不需要填入任何实参,但它也是函数
这关联到对象的概念

没有“return”的函数?

没有return语句的函数返回undefined

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值