zoukankan      html  css  js  c++  java
  • js 内存进阶 function扫描解析

    <!DOCTYPE html>
    <html>
    <head>
      <title></title>
    </head>
    <body>
      <script type="text/javascript">
        //情况1
        var fn = function(){ //在栈中,匿名函数,赋值给变量
          alert(1);
        };
        function fn(){ //在堆中 有名字的函数
          alert(2);
        }
        fn(); // 1
        //调用函数的时候先去栈中找有没有定义fn的变量,如果有就根据变量存储的内存地址来执行这个函数
        //先定义后执行


        //情况2
        /*

        var fn1 = 3;
        function fn1(){
          alert(4);
        }
        fn1(); //fn1 not a function
        */

        //情况3
        var fn2; //已定义未赋值的变量为undefined
        function fn2(){
          alert(5);
        }
        fn2(); //5
        //如果fn变量,没有存储内存地址则为undefined,那么就去堆中看看有没有fn的引用名称

        //情况4
        fn3();   //6     //3.调用fn3
        var fn3;    //1.先定义fn3   //4.undefined,去堆中找
        function fn3(){    //2.再定义函数fn3()    //执行 结果为6
          alert(6);
        }


        //情况5
        fn4();    //8    //3.调用fn4()
        var fn4 = 7;   //1.定义变量fn4  //4.赋值
        function fn4(){    //2.定义函数fn4()
          alert(8);
        }

        //情况6
        var fn5;  //1.定义fn5    //3.未赋值  undefined
        fn5();   //9   //调用执行fn5(),发现fn5未赋值,直接去堆中找fn5()
        function fn5(){  2.定义函数fn5()
          alert(9);
        }

        //情况7
        var fn6 = 10;  //1.先定义fn6     //3.将10赋值给fn6
        fn6();   //fn6 not a function  //4.调用执行fn6(),fn6  not a function
        function fn6(){  //定义函数fn6()
          alert(11);
        }
      </script>
    </body>
    </html>

  • 相关阅读:
    前端开发中同步和异步的区别
    SQL STUFF函数 拼接字符串
    Javascript的精华
    .net网站报错:对象的当前状态使该操作无效
    免费 WebOffice使用
    DotNetBar教程
    C#获取周的第一天、最后一天、月第一天和最后一天
    C#判断文字是否为汉字
    C# 将字符串转为&#2345;这种的 html实体编码
    SqlServer将没有log文件的数据库文件附加到服务器中
  • 原文地址:https://www.cnblogs.com/52fe/p/7826378.html
Copyright © 2011-2022 走看看