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")