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指明当前实在那个作用域内使用

浙公网安备 33010602011771号