全局执行上下文(Global Execution Context)
- 自动创建:在JavaScript代码开始执行时,会自动创建全局执行上下文。例如,当浏览器加载一个JavaScript文件或者在Node.js环境中运行一个.js文件时,首先就会创建全局执行上下文。这个全局执行上下文会包含全局变量(如在浏览器环境下,通过
var
声明的变量会挂载到window
对象上)、全局函数定义以及this
指向全局对象(浏览器中为window
,Node.js中为global
)。 - 示例代码:
// 全局变量声明 var globalVariable = 'I am a global variable'; // 全局函数定义 function globalFunction() { console.log('This is a global function'); } console.log(globalVariable); globalFunction();
- 在上述代码中,
var globalVariable
和function globalFunction
的定义都处于全局执行上下文中。当代码开始执行,全局执行上下文就被创建,它包含了变量globalVariable
和函数globalFunction
,this
指向全局对象(在浏览器环境下为window
)。
- 在上述代码中,
- 自动创建:在JavaScript代码开始执行时,会自动创建全局执行上下文。例如,当浏览器加载一个JavaScript文件或者在Node.js环境中运行一个.js文件时,首先就会创建全局执行上下文。这个全局执行上下文会包含全局变量(如在浏览器环境下,通过
函数执行上下文(Function Execution Context)
- 函数调用时创建:每当一个函数被调用时,就会创建一个新的函数执行上下文。这个执行上下文会包含函数内部定义的变量(通过
var
、let
或const
声明)、函数参数、内部函数定义以及this
的值(取决于函数的调用方式)。 - 示例代码:
function outerFunction() { var outerVariable = 'I am an outer variable'; function innerFunction() { var innerVariable = 'I am an inner variable'; console.log(outerVariable); console.log(innerVariable); } innerFunction(); } outerFunction();
- 当
outerFunction
被调用时,会创建outerFunction
的执行上下文。在outerFunction
执行上下文中,有变量outerVariable
和内部函数innerFunction
。当innerFunction
被调用时,又会创建innerFunction
的执行上下文,其中包含变量innerVariable
。在innerFunction
的执行上下文中,通过作用域链可以访问到outerFunction
执行上下文中的outerVariable
。
- 当
- 函数调用时创建:每当一个函数被调用时,就会创建一个新的函数执行上下文。这个执行上下文会包含函数内部定义的变量(通过
使用
eval
函数(不推荐但可以创建执行上下文)eval
函数的特点:eval
函数可以将传入的字符串作为JavaScript代码来执行,并且会为其创建一个执行上下文。不过,eval
函数的使用存在安全风险,并且会使代码的可读性和可维护性变差,所以在实际开发中应尽量避免使用。- 示例代码:
var code = 'var evalVariable = "I am created by eval"; console.log(evalVariable);'; eval(code);
- 在上述代码中,
eval
函数会将code
字符串中的内容作为JavaScript代码执行,在执行过程中会创建一个执行上下文,其中包含变量evalVariable
。由于eval
函数的特殊性,它可能会执行一些不可预测的代码,因此使用时需要格外谨慎。
- 在上述代码中,