梳理js执行过程,作用域与原型链的关系

js代码执行过程:
1.通篇检查语法错误。--》 2. 预编译(提升var 变量 -> [ 形参初始化赋上默认值 ] -> function 声明 -> 执行 )
--》3.执行(整理好的)代码

作用域链:在函数定义的那一刻,已经挂上了作用域链,至少存在一个顶层的GO

作用域链与原型链的唯一关系:

function aa(){ function bb(){ console.log(abc) } },

访问变量abc时,在闭包里面两个AO和一个GO均无声明变量时,
会最终寻找到window.abc , 从window原型链上寻找。

Object.prototype.obj = "hello";
console.log("console-- ", obj);//hello
obj = "000";
console.log("console-- ", obj);// 000
function test1() {
    console.log("console-- ", test1.obj);// hello
    Function.prototype.obj = "good";
    console.log("console-- ", test1.obj);// good
    test1.obj = "666"
    console.log("console-- ", obj);// function
    obj = "111";
    console.log("console-- ", obj);// 111
    var obj = function () {
    };
    console.log("console-- ", obj);// function
    obj = "555";

    function obj() {
    };
    console.log("console-- ", obj);// 555
    console.log("console-- ", test1.obj);// 666
};
test1.prototype.obj = "nice"
test1();
console.log("console-- ", obj);// 000
test2();
test3();

function test2() {
    console.log("console-- ", test1.obj);// 666
    console.log("console-- ", obj);// undefined
    var obj = "222";
    console.log("console-- ", obj);// 222
};

function test3(obj) {
    console.log("console-- ", obj);// undefined  444
    var obj = "222";
    obj = "333";
    console.log("console-- ", obj);// 333    333
};
test3("444")
};
test3("444")

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值