javascript 作用域链认识

本文详细解释了JavaScript中的作用域链概念,包括其工作原理、如何构造作用域链以及不同执行环境下的作用域链表现。此外,还探讨了this指针在不同上下文中的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用域链作用:保证执行环境里有权访问的变量和函数时有序的,作用域链的变量只能向上一级一级的访问,访问到window对象即被终止,作用域链向下访问变量是不被允许的。


(1):当页面加载的时候首先加载js,既script标签下的js代码,会按顺序执行,而这些能被执行的代码都是属于window的变量或函数;(script下定义的对象或函数(由function定义的)是不被执行的)

可知js中运行环境有两类:

一类是全局执行环境,即window代表的全局环境

一类是函数代表的函数执行环境,即局部作用域


(2)什么是作用域链?

js中有一个概念,执行环境栈 execution context stack,当一个函数的执行环境压入到执行环境栈里,这个时候就会在上下文变量里构造一个对象,这个对象就是作用域链scope chain;同时还会构造一个this对象,this对象也是属于上下文变量,而this变量的值就是当前执行环境外部上下文变量的一个拷贝,这个拷贝没有作用域变量.如:

其中qk1和qk2里的this里指针都是指向window,这是为什么呢?哈哈!

因为在js里我们定义函数方式是通过function 形式定义的,而这个函数不管指针定义在哪里,它都属于全局对象window


但我们知道很多this指针不是指向window的,如:

会发现this指针指向对象Object了,为什么呢?看下另一种写法

这两种写法是等价的,第一种对象定义叫做字面变量定义,第二种是标准写法,Object对象的本质也是一个function,所以当调用对象里函数时,函数的外部执行环境就是qk本身。

这得说到另一个知识,即js里通过new、apply、call改变函数的this指针,函数this指针都是指向window的

当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成了一条作用域链。每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KunQian_smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值