GO: global object 即 全局上下文

AO :activation object 活跃对象,函数上下文,在函数执行之前进行的一个步骤
 
代码编译过程:
1.检查通篇的语法错误,若有错误则不编译执行
2.预编译
3.解释一行,执行一行
 
提升:函数声明会整体提升,变量表达式只有声明提升,赋值不提升,如下:
console.log(a); //  输出 a的函数声明
function a() {
    var a = 0;
    var a = function() {}
}

var a = 1;

暗示全局变量:imply global variable

即变量为声明就赋值属于全局变量,一切全局变量都在window下面,在函数内部的变量,未声明就直接赋值,也是全局变量

function test() { 
    var jj = dd = 1;
} 
test4();

console.log(jj) //Uncaught ReferenceError: jj is not defined
console.log(dd) // 1

说明 jj是函数内的局部变量,而dd是全局变量

 
 
寻找GO的方法:
1. 找变量
2. 找函数声明
3. 执行
var a = 1;

function a() {
    console.log(a) 
};

console.log(a); //1
console.log(a, b); // a输出function a函数,b 是 undefined。a是函数声明,会整体提升,b是函数表达式,只有声明提升
function a() {};
var b = function() {};

 

预编译:在函数执行之前进行的一个步骤即AO  activation object 活跃对象,函数上下文

寻找AO的方法:

1. 寻找函数的形参和变量声明
2. 把实参的值赋值给形参
3. 寻找函数声明,并赋值
4. 执行
function test(a) {
    console.log(a); // function a() {}
    var a = 1;
    console.log(a); // 1
    function a() {};
    console.log(a); // 1
    var b = function() {};
    console.log(b); // function() {}
    function d() {}

}

test(2);

AO的过程如下:

AO = {
    a: (寻找函数的形参和变量声明)undefined ->(把实参的值赋值给形参)2 -> (寻找函数体声明,并赋值)function a() {} -> (执行) 1
    b: (寻找函数的形参和变量声明)undefined -> (执行)function() {} 
    d: (寻找函数体声明,并赋值)function d() {}
}
作业题:
function test(a, b) {
    console.log(a);
    c = 0;
    var c;
    a = 5;
    b = 6;
    console.log(b);
    function b() {};
    function d() {};
    console.log(b); 
}

test(1)
函数内部和外面有相同的变量,如果函数内在变量赋值之前,如果函数内部有变量声明则用函数内部的变量声明,没有则用外面的同名变量
a = 1;
function test() {
    console.log(a); // undefined
    a = 2;
    console.log(a); // 2
    var a = 3;
    console.log(a); // 3
}

test();
var a;
a = 1;
function test() {
    console.log(a); // 1
    a = 2;
    console.log(a); // 2
    a = 3;
    console.log(a); // 3
}

test();
var a;
function test() {
    return a; // function a() {}
    a = 1;
    function a() {};
    var a = 2;
}

console.log(test())
function test() {
    a = 1;
    function a() {};
    var a = 2;
    return a; // 2
}

console.log(test());
a = 1;
function test(e) {
    function e() {};
    arguments[0] = 2;
    console.log(e); // 2
    if(a) {
        var b = 3;
    }
    var c;
    a = 4;
    var a;
    console.log(b); // undefined
    f = 5; // 全局变量
    console.log(c); // undefined
    console.log(a); // 4
}

var a;
test(1);

 

posted on 2019-10-08 21:34  yyy_鸳鸯  阅读(988)  评论(0编辑  收藏  举报