zoukankan      html  css  js  c++  java
  • JS: GO 和 AO

    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);
  • 相关阅读:
    《自拍教程76》Python 一键批量安装第三方包
    Java 在 PDF 中添加表单域
    Spire.Cloud.Word 加密 Word 文档
    Java 添加超链接到 Word 文档
    为什么java8还在被大量使用?
    要替代C和Java 的后浪,现在混得怎么样?
    学习Java之前是否需要学习HTML
    半路出家学习Java是否能学出来
    学习Java语言有什么好处?
    Java只有中国开发者在用了吗?
  • 原文地址:https://www.cnblogs.com/ycherry/p/11638041.html
Copyright © 2011-2022 走看看