执行上下文 (同名:执行上下文环境),先讲述全局环境下的三种情况;
情况一:
控制台直接输入 console.log(a); ==> a is not defind;
控制台输入 console.log(a); ==> undefind;
var a;
控制台输入 console.log(a); ==> undefind;
var a = 10;
分析:第一句a is not defind;表示没有a变量,第二句输出undefind表示a变量定义但是未赋值,说明代码执行之前浏览器已经做了准备工作(声明了变量a),第三局输出undefind表示a变量定义并未赋值,说明在代码执行之前浏览器的准备工作只是声明变量并不赋值。
情况二:
有js开发经验的开发者应该知道,无论在哪个位置获取this都是有值的,所以在执行上下文环境中会直接给this赋值。
情况三:
关于函数,分别在控制台输出console.log(f1); function f1(){};和console.log(f2); var f2 = function(){}; ,得到的结果分别为f1函数和undefind,所以函数声明会在执行上下文环境中声明并赋值,而函数表达式会在执行上下文环境中声明该变量。
总结:变量、函数表达式-----变量声明,默认赋值为undefind;
this-----赋值;
函数声明-----赋值;