22函数 作用域 预解析

22函数 作用域 预解析

一、函数的返回值

return语句,用于向函数调用者返回一个值,并立即结束函数的运行

如果要实现外部获取函数内部运行的结果,可以通过return语句跟后面的要返回的值来实现返回值

如果没有使用return语句直接调用函数内部的值,运行会弹出undefined

利用return输出两个不相同的数中最大的值

function getMax(a, b) {
	var max
	if (a > b) {
		max = a
	} else {
		max = b
	}
	return max
}
console.log(getMax(10,20))		//20

利用return简化获取元素的代码

<box id = "box"></box>
function getId(id){
    var id = document.getElementById(id)
    return id
}
var box = getId("box")
console.log(box)	//<box id = "box"></box>

二、作用域

作用域

​ 变量早函数内部作用的范围/区域。有函数的地方就有作用域

全局作用域和局部作用域

全局变量:可以在函数内部和函数外部使用的变量,就是"全局变量"。

在函数外部定义的变量,就是"全局变量""全局变量"即可以在函数外使用,也可以在函数内部使用。

"全局变量"在网页关闭时,自动消失(释放空间)。

总结:在函数外部定义的变量,就是全局作用域


局部变量:只能在函数内部使用的变量,称为"局部变量""局部变量"在函数内部定义,在函数内使用。

"局部变量"在函数外部无法访问。

"局部变量"在函数执行完毕就消失了。

总结:在函数内部定义的变量,就是局部作用域


在函数内部,省略关键字var定义的变量是"全局变量"。

注意:var关键字尽量别省略,省略后"全局变量""局部变量"容易搞混淆。

定义变量都使用var

作用域链

- 全局作用域称之为0级作用域
- 定义函数开启的作用域就是1-2-3...作用域
- JavaScript会将这些作用域链接在一起形成一个链条,这个链条就是作用域链0-1-2-3-

变量在作用域查找规则

- 先在当前域找,找到就使用当前作用域找到的
- 如果当前作用域中没有找到,就去上一级作用域中查找
- 以此类推直到0级为止,如果0级作用域还没找到,就报告错

变量的生命周期

- JavaScript变量生命周期在它声明时初始化
- 局部变量在函数执行完毕后销毁
- 全局变量在页面关闭后销毁

主要是为了减少内存占用,提高性能

三、预解析

预解析

浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码。也就是说浏览器不会直接执行代码,而是加工处理之后再执行,这个加工处理的过程,我们就称之为预解析

预解析规则

变量提升

- 将变量声明和函数声明提升到当前作用域最前面
- 将剩余代码按着书写顺序依次放到后面

预解析补充

把一个函数赋值给变量(var声明的),函数声明不会提升

注意

在函数内声明的变量如果没用使用var声明,那么这个变量不是局部变量而是一个全局变量,这是一个js的bug

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值