同样会先做一些预处理在开始执行函数体中的代码
在执行JS代码时候,可以当作是在执行一个全局函数的代码,在这个全局函数的代码体中又有可能执行了很多个局部函数。
JS中在执行函数的时候会为函数创建一个执行的上下文用来生存在函数中创建的变量等数据,当函数执行完之后会销毁创建的该执行上下文。
这个执行上下文,不是一个东西,因为它只是在栈中斥地了一块内存,而在堆中并没有生存指向该栈地点的变量。
1.全局执行上下文
在执行JS代码前会首先将window确定为全局执行上下文,然后会对全局的数据做一些预措置惩罚惩罚:首先是var变量声明和函数声明的提升,然后将这些声明的变量添加为window的属性,函数添加为window的要领。this赋值为window。然后才开始执行JS的代码。
2.函数执行上下文
在挪用函数的时候才会创建函数执行上下文。创建完成后,同样会先做一些预措置惩罚惩罚在开始执行函数体中的代码。这些预措置惩罚惩罚包孕:如果函数又参数首先给函数的形参变量赋值,,然后将该形参变量添加到创建的函数执行上下文的属性中;创建arguments变量,并赋值为传入的实参列表,然后将arguments添加为函数执行上下文的属性;var变量和函数的提升,并将其赋值到函数执行上下文的属性和要领;this赋值为挪用该函数的东西。然后开始执行函数中的代码。
JS中使用栈来打点执行上下文的,栈的特性就是后进先出,在开始执行JS代码的时候首先将window全局执行上下文入栈,然后每挪用函数的时候就创建该函数执行上下文并入栈,执行完函数中所有代码后将其出栈销毁。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30789.html