龙空技术网

JavaScript浅淡执行上下文栈和变量对象

奶爸程序猿1011 117

前言:

而今兄弟们对“js对象重新赋值”可能比较珍视,小伙伴们都想要知道一些“js对象重新赋值”的相关文章。那么小编也在网摘上汇集了一些有关“js对象重新赋值””的相关内容,希望朋友们能喜欢,大家一起来了解一下吧!

JS是单线程的语言,执行顺序肯定是顺序执行,但是JS 引擎并不是一行一行地分析和执行程序,而是一段一段地分析执行,会先进行编译阶段然后才是执行阶段。

例子一:变量提升

fn;  // undefinedvar fn = function () {    console.log('fn1');}fn();  // fn1,fn赋值var fn2 = function () {    console.log('fn2');}fn(); // fn2,fn重新赋值

例子二:函数提升

fn();  // fn2function fn() {    console.log('fn1');}fn();  // fn2function fn() {    console.log('fn2');}fn(); // fn2

例子三:声明优先级,函数 > 变量

fn();  // fn2var fn = function() {    console.log('fn1');}fn();  // fn1,fn重新赋值function fn() {    console.log('fn2');}fn(); // fn1

上面三个例子中,第一个例子是变量提升,第二个例子是函数提升,第三个例子是函数声明优先级高于变量声明。

需要注意的是同一作用域下存在多个同名函数声明,后面的会替换前面的函数声明。

执行上下文

执行上下文总共有三种类型全局执行上下文:只有一个,浏览器中的全局对象就是 window 对象,this 指向这个全局对象。函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文。Eval 函数执行上下文: 指的是运行在 eval 函数中的代码,很少用而且不建议使用

后续。。。

总结如下:

1、全局上下文的变量对象初始化是全局对象2、函数上下文的变量对象初始化只包括 Arguments 对象3、在进入执行上下文时会给变量对象添加形参、函数声明、变量声明等初始的属性值4、在代码执行阶段,会再次修改变量对象的属性值

标签: #js对象重新赋值