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

废话不多说,直接开始。

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

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

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

欢迎大家批评指正哈。

最新文章

  1. SQL Server 监控系列(文章索引)
  2. webpack 配置文件
  3. Mysql存储过程语法
  4. [转]编译VC++程序warning C4819快速解决
  5. vc 实现打印功能
  6. 动手学习TCP:服务端状态变迁
  7. about_Execution_Policies
  8. WIN7 X64 解决无法安装IE11,以及无法点击微软升级包MSU的问题
  9. Javascript 图片延迟加载之理论基础
  10. iOS 8 Xcode6 设置Launch Image 启动图片&lt;转&gt;
  11. printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数
  12. Cocoa与Cocoa Touch的区别
  13. elfiner-servlet 2.x已开源!
  14. 进程识别号(PID)的理解
  15. php中的双引号和单引号的区别?
  16. DIV 遮挡问题总结
  17. 毕业后的第二份工作:进入国外 在新加坡工作 每月一次18K
  18. 《.NET 设计规范》第 6 章:扩展性设计
  19. anaconda中的包如何传到pycharm中使用?
  20. 利用grub从ubuntu找回windows启动项

热门文章

  1. Apache无法启动原因
  2. 【树莓派】Linux自动配置IP
  3. Fireworks快捷键大全和ps查看切图的坐标颜色
  4. MySQL---事务知识,你搞明白没有?
  5. IOS开发创建开发证书及发布App应用(八)——使用Application Loader工具上传应用
  6. exports和module.exports的区别
  7. loadrunner提高篇-block(块)技术和参数化
  8. ajax 实现修改功能
  9. WebStorm里使用注意点
  10. Flash加载ini文件!