博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中变量、参数、函数之间的关系
阅读量:5227 次
发布时间:2019-06-14

本文共 1094 字,大约阅读时间需要 3 分钟。

 

废话不多说,直接开始。

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

<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()。

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

欢迎大家批评指正哈。

 

转载于:https://www.cnblogs.com/zdhblog/p/6801412.html

你可能感兴趣的文章
结对第一次—原型设计(文献摘要热词统计)
查看>>
The 2014 ACMICPC Asia Regional Xian
查看>>
了解JavaScript核心精髓(一)
查看>>
redis的使用与 django的redis的使用
查看>>
一个漂亮灵活的PHP图片验证码
查看>>
Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)
查看>>
vs2015未安装 Style 的 Visual Studio 语言支持
查看>>
Error creating bean with name 'itemCatController'
查看>>
[NOIP2015模拟10.22] 最小代价 解题报告 (最小生成树)
查看>>
IDEA设置注释模板最佳实践
查看>>
[NOI2016]循环之美——结论+莫比乌斯反演
查看>>
httpwatch 9.3怎么在ie 8上看不到
查看>>
VirtualBox 4.3.18 启动虚拟机时显示不能加载 R3模块并退出故障解决一例
查看>>
关于物料的分类
查看>>
easyui-textbox input输入框的一种取值方式
查看>>
JAVA常见算法题(九)
查看>>
iOS 开发小技巧
查看>>
【转】电子方向开发工程师的职场人生路
查看>>
JqERY
查看>>
图解HTTPS
查看>>