js 知识点 实用 与面试汇总

作用域 scope

 

什么是作用域 ?

某个方法或者变量,可以在特定的区域内才能起到作用(够被访问或调用 )。而这个范围,就是这个方法或者变量的作用域。

分类:

全局作用域

局部作用域

W3C的解释是

全局 JavaScript 变量

函数之外声明的变量,会成为全局变量

全局变量的作用域是全局的:网页的所有脚本和函数都能够访问它。

但是博主感觉。全局变量和局部变量,可以理解为两个相对概念。而真正意义上的全局变量,只有程序创建时的初始对象上,所挂载的变量。(浏览器的windows对象下的属性 vue中的Vue对象下的属性。。。)而在日常交流中,大家会根据自己的理解去定义和阐述全局和局部两个概念。

如:在页面开发过程中。我们会把页面最外层的变量说成全局变量。其实真正的意义是相对本页面内的全局变量,只是临时挂在到了windows上 ,在页面跳转 刷新等操作时都会改变,所以这种变量只能停留在当前页面。在页面更新或者销毁时他也会随之消失。即使 本页面使用window.XXX 创建变量 也是一样 或者可以叫他临时全局变量。这样解释可能更加明确,当然也更加矫情。

 

上面主要是阐述了一些作用域的一些基本概念

下面我们开始用一些实例阐述和验证一些知识点

var a="测试变量A"
	b="测试变量B"
function test(){
	console.log("这是变量a--",a)
	console.log("这是变量b--",b)
	console.log("这是变量win.a--",window.a)
	console.log("这是变量win.a--",window.b)
}
test()

打印结果:

由此可见其实在当前页面是被window对象包裹的,内部创建的变量也会直接挂在到,当前页面的window对象上的临时全局变量,可以在本页直接使用。当跳转以后统一销毁。

 

 var a="测试变量A"
function test(){
    console.log("这是变量a--",a)
	console.log("这是变量win.a--",window.a)
	a=5
	console.log("这是变量a--",a)
	console.log("这是变量win.a--",window.a)
	var a=""
	console.log("这是变量a--",a)
	console.log("这是变量win.a--",window.a)
}
test()

打印结果:

这就是作用域和变量提升的的典型表现。其实上面的代码最后的表现形式是

当局域变量内有同名变量时,(根据就近原则)优先使用局域变量。类似于css的权重 。而第一次的打印之所有没有打印是因为在局域变量内的a还未定义,但是在代码预编译阶段会识别到在同层作用域内有同名变量从而舍弃了最外层的全局变量。

 

 

 

function a1(){
		a=100
}
a1()
console.log(a)

特性 从外向内传递  同级相互协调  变量有先后顺序 函数一般没有先后顺序(里面涉及到预编译/预加载的相关知识以后作者会更新相关文章)

 

函数调用有效

function a(){
    console.log("aaaa")
    b()
}
function b(){
    console.log("bbbbbbbbbb")
}
a()

//aaaa
// bbbbbbbbbb


 

利用let特性定义所有 局部变量互不影响

let a=10
function ac(){
	let a=1
	console.log(a)
}
{
	let a=100
	console.log(a)
}
ac()
console.log(a)


//100
//1
//10

作用域的提升 let局部变量提升只可以提升一次  而且不可能超过最初定义范围

 

防抖和节流

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值