• JS代码执行机制


    JS代码从编译到执行

      我们写出一段JS代码,JS的引擎并不是按照我们书写的顺序从上到下顺序编译并且执行的,首先是按照自己的规则对我们的代码先进行编译,然后从上到下执行编译的代码。

      在全局作用域中,JS首先会对我们的函数进行声明,然后就是我们经常听到的变量提升机制,然后才是按照我们书写代码的顺序,来进行编译,然后在执行编译的代码。

      看如下代码:

    function fn(){
        console.log(a);
    }
    fn();
    var a = "value";

      非常常见的一个面试题fn函数执行输出undefined,我们按照上面说的JS编译执行的机制来模拟编译后的代码:

    function fn(){
        console.log(a);
    }
    var a = undefined;
    fn();
    a = "value";

      然后按照编译出来的顺序自上而下的来执行我们的代码,可以看出当fn函数执行时a还没有进行赋值,此时的a为undefined。

      在函数作用域中的编译顺序为:首先对函数的存在的参数进行声明,然后是内部的函数,在然后是变量,然后在顺序编译我们书写的代码,假如有如下的代码:

    function wrap(a,b){
        var c = "c";
        var str = a+b+c;
        function pirint(){
            console.log(str)
        }
        print();
    }
    wrap("a","b");

      很标准的一段代码,wrap函数内部模拟编译的代码为:

    var a = undefind;
    a = "a";
    var b = undefined;
    b = "b";
    function _print(){
        console.log(str);
    }
    var c = undefined;
    var str = undefined;
    c = "c";
    str = a+b+c;
    _print();

      弄清JS的执行机制可能并不会让我书写数功能更加强大的代码,但是可以让我们写出更加优雅的代码,其次在做一些笔试题的时候也可以让我们更加的得心应手,在高的墙都是由一块块砖一粒粒细沙垒成的,代码也是一样在复杂的代码也都是以基础的代码作为根基的。

    JS基本使用

      代码无论怎么写,基础的知识都是不变的。

      1."."操作符的左边永远是一个对象,右边就是属性(属性值也有可能还是一个对象),结果就是这个属性的属性值。

      2."()"永远都是对一个方法的调用。

      3."()"里面永远都是参数,如果里面的参数是一个表达式,则先执行表达式,然后将表达式执行的结果作为参数。

      例如我们经常使用的JQ的链式操作:$("#demo").html().css();$、html、css都是一个方法名字,而每一个方法都会返回一个对象,从而来实现方便我们开发的链式操作。

  • 相关阅读:
    bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课
    bzoj1640 [Usaco2007 Nov]Best Cow Line 队列变换
    bzoj1639 [Usaco2007 Mar]Monthly Expense 月度开支
    bzoj1637 [Usaco2007 Mar]Balanced Lineup
    bzoj1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
    bzoj1635 [Usaco2007 Jan]Tallest Cow 最高的牛
    bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通
    bzoj3407 [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题
    bzoj1631 [Usaco2007 Feb]Cow Party
    bzoj1632 [Usaco2007 Feb]Lilypad Pond
  • 原文地址:https://www.cnblogs.com/shinhwazt/p/5911345.html
Copyright © 2020-2023  润新知