JS (6) 作用域

1.JS(ES6)之前的作用域有两种

-- 全局作用域
-- 局部作用域
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突
1.1.全局作用域
整个script标签,或者一个单独的js文件
1.2.局部作用域
函数内部就是局部作用域,这个代码的名字只在函数内部起效果和作用,也称函数作用域。
1.3.(ES6之后)的块级作用域
块级作用域由{}包裹

2.变量的作用域

-- 全局变量
-- 局部变量
2.1.全局变量
在全局作用域下声明的变量,(在函数外部定义的变量)
-- 全局变量在任何位置都可以使用
-- 在全局作用域下,var声明的变量,就是全局变量
-- 特殊情况下,在函数内部不声明,直接赋值的变量也是全局变量
2.2.局部变量
在局部作用域下声明的变量,(在函数内部定义的变量)
-- 局部变量只能在该函数内部调用
-- 在函数内部,var声明的变量就是局部变量
-- 函数的形参实际上就是局部变量
2.3.全局变量和局部变量的区别
-- 全局变量:在任何一个地方都可以使用,只有浏览器关闭时,才会被销毁,因此比较占内存。
-- 局部变量:只在函数内部使用,当其所在代码块被执行时,会被初始化,当代码块运行结束后,就会被销毁,因此更节省空间。

3.作用域链

采取就近原则的方式来查找变量的最终值
内部函数可以访问外部变量

4.预解析

-- 预解析:在当前作用域下,JS代码执行前,默认会把带有var和function声明的变量在内存中进行提前声明或定义。
-- 代码执行:从上到下执行JS语句
	预解析会把变量和函数的声明在代码执行前完成
4.1.变量预解析
预解析也叫变量,函数提升
变量提升(变量预解析):变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。
4.2.函数预解析
函数提升:函数的声明会被提升到当前作用域最上面,但是不会调用函数
注意:函数声明代表整个函数体,所以函数提升后,函数变名代表真个函数,但是函数并没有调用。
4.3.函数表达式声明函数问题
函数表达式创建函数,会执行变量提升,此时接收函数的变量名无法正确调用
举个🌰:
	fn()
	var fn = function(){
		console.log('哈哈哈哈')
	}
	结果:报错提示,fn is not function
	解释:会做变量提升,fn在提升后值是undefined,而fn调用时候,他还不是函数,是undefined。所以无法正确调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值