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()。
可能我的知识不足,上面涉及到的我只能这样说了,以后有机会了好好研究研究。
欢迎大家批评指正哈。
JavaScript中变量、参数、函数之间的关系的更多相关文章
- JavaScript中变量和函数声明的提升
现象: 1.在JavaScript中变量和函数的声明会提升到最顶部执行. 2.函数的提升高于变量的提升. 3.函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找. 4.匿名函数不会提升. ...
- 关于javascript中变量及函数的提升
javascript中变量以及函数的提升,在我们平时的项目中其实还是挺常用的,尤其是大型项目中,不知不觉就会顺手添加一些变量,而有时候自己的不小心就会酿成一些不必要错误,趁有时间整理一下自己对于js中 ...
- C#与Javascript变量、函数之间的相互调用
原文地址:http://blog.csdn.net/wonsoft/article/details/2595743 C#与Javascript变量.函数之间的相互调用 一.javascript调用C ...
- C语言中变量和函数的作用域和链接属性
C语言中变量和函数的作用域和链接属性 作用域 代码块作用域: 代码块指的是使用"{}"包围起来的部分. 在代码块中定义的变量,代码块之外是不能访问的. 代码块嵌套之后的变量作用域, ...
- 理解与使用Javascript中的回调函数 -2
在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply() ...
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
- 理解和使用 JavaScript 中的回调函数
理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报 分类: JavaScript(4) 目录( ...
- JavaScript 中变量、作用域和内存问题的学习
这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScrip ...
- JavaScript中变量声明有var和没var的区别
JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...
- 在 JavaScript 中使用构造器函数模拟类
今天,我们要讲的是在 JavaScript 中使用构造器函数(construcor function)模拟类. 构造器函数简介 你可以使用 ES6 的 class 关键字来实现类,不过我建议你使用传统 ...
随机推荐
- Python模块发布
项目根目录添加setup.py模块: from distutils.core import setup setup( name="模块名字", version="1.0. ...
- 10分钟精通SharePoint - SharePoint发展历程
SharePoint 2001: SharePoint Team Service(STS) SharePoint Portal Server(SPS) SharePoint 2003: Windows ...
- 老司机实战Windows Server Docker:1 初体验之各种填坑
前言 Windows Server 2016正式版发布已经有近半年时间了,除了看到携程的同学分享了一些Windows Server Docker的实践经验,网上比较深入的资料,不管是中文或英文的,都还 ...
- ps-抠图
1- 图层区—复制背景图层 防止原图修改失败后无法还原 2- 工具栏——磁性套索工具 可以有效的对色彩边线较为明显的图片进行抠图 ...
- sass 与 less 的区别与学习
一直使用的都是sass,公司提出新需求要用less,看了一下less的官方文档,感觉记不住.在这我想用与sass的比较学习,加深印象.也希望可以帮助到一些人. 一.安装sass与less sass基于 ...
- angularjs fileUpload
文件上传一直是我不熟悉的地方,<a href='https://github.com/nervgh/angular-file-upload/wiki/Module-API'>官网解释的例子 ...
- SQL Server从远程服务器导入数据
语法 insert inot user select * from opendatasource('sqloledb','server=192.168.0.1;uid=sa;pwd=dbpasswor ...
- Windows Phone下页面跳转动画的实现
写在前面的一些废话: 前段时间一直忙于其他的事情,好长时间没有更新博客,很多东西虽然看过.学过,但是没有仔细去思考,去总结,长时间不用或者用的少难免会遗忘.最近由于家里以及感情方面的事,人也变得有点怨 ...
- rem 结合 scss 移动端自适应 初级入门demo
首先说明 本篇 内容 适合初级使用 rem 开发移动端 自适应 公式计算 推导过程, 高手绕路. 目标尺寸 = rem * 根字体大小 Px = rem * (html根字体px) 根字体大 ...
- git pull错误记录及解决
执行操作:$ git pull 返回错误: error: RPC failed; result=7, HTTP code = 0 fatal: The remote and hung up unexp ...