Js文件执行的过程

执行文件的时候会先创建一个全局执行上下文

它由两部分组成

  • 全局对象
  • this 如果是浏览器中this is window ,在node中则是 global

执行文件分为两个过程

  • 创建阶段
    • 创建一个全局的对象
    • 创建this对象
    • 为变量和函数分配内存
    • 将变量和函数值设置为默认值undefined
  • 执行阶段

函数执行上下文

this 当创建全局上下文或者函数上下文的时候会被创建

const x = 'x'

function test() {
	
}

test()

在调用test的时候会创建函数执行上下文

  • 创建this对象
  • 创建arguments对象
  • 为变量和函数分配空间(有的会分配堆,有的会分配栈)
  • 为变量和函数设置初始值

我们执行代码是在一个执行栈中添加和弹出,出现函数的时候会创建一个新的执行上下文添加到执行栈中,当新进来的执行上下被执行结束后推出栈中,如果函数中调用另外一个函数则会嵌套生成函数执行上下文,例如下面的则会在执行栈中添加, 从下到上依次是: 全局上下文、 test函数执行上下文、 test2函数执行上下文

const x = 'x'

function test() {
	test2()
}

function test2() {
}

test()

Example:

const name = 'kangkang'

function showName(name) {
	console.log(name)
}

showName(name)

对于作用域来说,如果嵌套内的函数作用域没有使用的变量,它将往上查找最近的父级上下文,一直到全局上下文

function test(value) {
	return function test2(y) {
		return value + y
	}
}

let add = test(3)

let addResult = add(2)

console.log(addResult)

test函数中返回了一个test2函数,add则是一个函数 add = funtion test2(y) { return 3 + y} , addResult = 3 + 2

创建全局上下文 分配变量、执行全局上下文到test(3)被执行到的时候创建一个新的函数上下文

函数内创建的变量没有带了let const var 则会默认添加到全局上下文的全局对象上,而顶层创建的var 等变量会自动添加到 全局上下文中的全局对象上 [浏览器上面是 window, node是global object ]

funtion test() {
	x = 'aa' // 添加到了 global object上面
}

var y = 'bb'

this的使用

使用this指明当前实在那个作用域内使用

词法作用域和语法作用域等

posted @ 2021-03-05 11:48  O噗寺的小和尚  阅读(304)  评论(0)    收藏  举报