zoukankan      html  css  js  c++  java
  • JavaScript中变量、参数、函数之间的关系

    废话不多说,直接开始。

    我们看一段代码(参考其他资料所得)

    <script type="text/javascript">


        function a(b){

            console.log(b);

            function b(){

            console.log(b);
           }
    }
    a(1);
    </script>

    运行结果是什么呢?请各位读者先不要运行代码,先思考一下猜猜结果。

    ——————————————————————————————————

    不管你想的结果是几个,不管你想的结果是不是1,唯一结果是:

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

    是的,结果很以外(大神们请忽视我们这些小白),那为什么会出现这样的结果呢?我们来根据结果逆推分析一下。

    首先分析这段代码:

        1.创建函数a(b),传递的参数是b,

        2. 输出b,

        3.a函数里面在输出b后声明一个函数b(),这个b()函数内容是输出b,

        4.调用函数a(1),传递1.

    然后分析代码的运行:

         1、这个输出是哪一行的呢?这段代码运行时只调用了a()函数,b()函数只是声明而没有调用,所以这个输出是函数a()里面的输出,即第一个confole.log(b);

         2、既然知道了输出语句,就分析输出内容,很明显输出的是b

         3、根据输出结果,这个b不是传递过来的参数b(调用时是1),而是a()函数里面声明的子函数function b(),

         4、传递的参数失效了

    总上分析,我们好像明白了一点,在函数a()里面,子函数声明的优先级(暂且这样说)好像比参数的高啊

    所以,虽然调用a()时传递了1给b,但是有立刻将b()函数给了变量b,执行后就输出了function b()函数。

    拓展:

    通过以上的案例,并查询其他资料,我总结一下函数中内部执行流程。

    一段代码写完后到运行结束,分为两个时期(我虽然学过编译原理,但是跟没学一样,所以不会用词):读、运行。

    1、读一段代码时,只管变量和函数的声明,不管赋值,比如 var a=3;只知道有个变量叫a,值不管。

    2、运行代码时,比如调用函数a(1),传递参数1给形参b,之后并不执行cosole.log()函数,而是继续找子函数声明,于是找到了函数function b(),这个函数赋值给变量b

    3、读完了,到了运行代码,运行console.log(b),自然输出了function b()。

    可能我的知识不足,上面涉及到的我只能这样说了,以后有机会了好好研究研究。

    欢迎大家批评指正哈。

  • 相关阅读:
    前端CSS-font属性,超链接的美化,css精灵,background综合属性
    iOS App上架流程(2016详细版)
    iOS中使用正则
    iOS开发--JS调用原生OC篇
    iOS开发--OC调用JS篇
    CocoaPods 的简单快速安装方法
    iOS开发小技巧 -- tableView-section圆角边框解决方案
    Mac合并分区
    iOS开发小技巧
    iOS开发中遇到的错误整理
  • 原文地址:https://www.cnblogs.com/zdhblog/p/6801412.html
Copyright © 2011-2022 走看看