<script type="text/javascript">
function fun(a){
console.log(a); // function var a=11;
function a(){
return 22;
} console.log(a); //
}
fun(33);
</script>

问题1:为什么第1个会输出 function呢,为什么不是实参33呢?

问题2:函数内部变量和函数在”预编译“的时候究竟是怎么样的呢?

问题3:var a=11;这个变量声明和函数名称相同了怎么处理?

首先是”预编译“过程中,函数体内部 变量和函数声明会被提到最先执行,变量在没有赋值时为undefined,那么函数呢?有人说函数声明时,声明和赋值一起完成了。

    <script type="text/javascript">
console.log(ask);// function ask
var ask=12;
function ask(){
alert("111");
}
console.log(ask);// 12
</script>

上面这段代码说明一个问题,变量名和函数名同名的情况下,其实只声明了一个变量。函数声明后就赋值了,所以第1个log的时候,会是函数。也就是他们说的优先级,函数>局部变量。可以这样理解,假如函数声明先执行,那么var ask=12;就不再是声明变量了,只是给变量重新赋个值。假如变量声明先执行,那么ask暂时=undefined,后边函数声明的时候直接就想变量的undefined变成了函数。

<script type="text/javascript">
function fun(a){
console.log(a);//
var a=11;
console.log(a);//
}
fun(33);
</script>

上面这段代码,第一个log为33。如果var a=11;是变量声明并赋值的话,我们知道log的时候a=undefined,说明此处var a=11不是声明而仅仅是简单的赋值。

再来个例子:

<script type="text/javascript">
function fun(a){
console.log(a);//
var a;
console.log(a);//
}
fun(33);
</script>

这也说明var a;不再是声明了,因为形参中a早就声明了。上面两段代码得出一个结论:函数形参和函数局部变量同名的话,其实只是一个变量。形参是声明,内部变量前加了var 同样只是赋值。

所以这道题,从头到尾只有1个局部变量。最开始a==33,进入函数后a变成了function ,最后a 变成了11。感谢TX同学一开始就说的 内部function》内部变量》参数

javascript函数中变量重名的更多相关文章

  1. 规避Javascript多人开发函数和变量重名问题

    函数和变量重名始终是一个令人头痛的问题,先讲变量吧,相信了解JS的朋友都知道,在JS中 是没有块级作用域的只有函数作用域,也就是说那些以大括号为界定符的代码块是管不住其中定义 的变量的作用域的,举例: ...

  2. C++ 类的继承四(类继承中的重名成员)

    //类继承中的重名成员 #include<iostream> using namespace std; /* 自己猜想: 对于子类中的与父类重名的成员,c++编译器会单独为子类的这个成员变 ...

  3. 浅谈javascript函数,变量声明及作用域

    javascript函数跟变量的声明.作用域这些概念网上都已经讲烂了. 这里写个博客,也相当于做个笔记. 变量声明 首先看个例子: var globalVar = "gv"; fu ...

  4. linker command failed with exit code 1 (use -v to see invocation) 变量重名

    有时候,xcode报错看不到,点最后一个按钮,类似气泡的就能看到 报错信息: duplicate symbol _imgNummmm in:    /Users/mianmian/Library/De ...

  5. c++中的重名问题

    看C++视频教程-范磊主讲(2.91G)视频学习笔记整理. 1.c++为什么要引入名字空间(namespace)? c++引入名字空间这个概念,是为了避免重名问题,比如说避免重复的函数名或者变量名引起 ...

  6. javascript函数中的三个技巧【三】

    技巧三: [函数绑定] 在javascript与DOM交互中经常需要使用函数绑定,定义一个函数然后将其绑定到特定DOM元素或集合的某个事件触发程序上,绑定函数经常和回调函数及事件处理程序一起使用,以便 ...

  7. delphi with... do和自定义变量重名

    with类中的变量和外部变量如果重名,会将外部变量覆盖,这点需要注意!!!!!

  8. JavaScript函数中的参数(arguments)

    arguments argument是JavaScript中的一个关键字,用于指向调用者传入的所有参数. function example(x){ alert(x); alert(arguments. ...

  9. 多测师讲解python _函数中变量_高级讲师肖sir

    定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是 被定义为局部变量.在这种情况下,不论全局变量中是否用到该变量名,函数中 使用的都是局部变量.例如: num=100 #全局变量 ...

随机推荐

  1. ubuntu安装rpm包

    ubuntu下的rpm包的安装方法 一般是不能够直接安装的,我们需要一个工具叫alien,先install它吧.然后按照下面择所需. 1.直接安装: alien -i -c filename.rpm ...

  2. 常用的CSS Hack

    一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Hack来解决浏览器局部的兼容性问题.而这个针对不同的浏览器写不同的CS ...

  3. iOS Orientation bug

    Every September means pain for iOS developers- you need to make sure your old apps/code run on the n ...

  4. 2016年JS面试题目汇总

    1.怎样添加.移除.移动.复制.创建和查找节点? //1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 ...

  5. listview优化技术

    1.在adapter中的getView方法中尽量少使用逻辑 2.尽最大可能避免GC 3.滑动的时候不加载图片 4.将ListView的scrollingCache和animateCache设置为fal ...

  6. 关于 escape、encodeURI、encodeURIComponent

    参考资料:http://hi.baidu.com/flondon/item/983b3af35b83fa13ce9f3291   http://www.w3school.com.cn/js/jsref ...

  7. 关于<head></head>标签;<form></form>标签

    <head> <title>此处写标题</title> 这是唯一能被用户看到的标记 <meta/>标签: 1.设置字符集:<meta http-e ...

  8. TP中关于自定义类库的添加和使用

    ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的.只要按照规范定义,都可以实现自动加载. 类库存放位置:Think目录:系统核心类库Org目录:第三方公共类库demo ...

  9. 正则表达式测试器 beta_

    说明:"言简意赅".简而从之:如题※网上已经有很多正则的测试工具了※感谢小Z推荐了一款非常好的(但是个别子匹配项多时卡顿.应该是我的表达式问题)故而花了点时间照着“抄”了一个,并配 ...

  10. [IOS8兼容性]IOS8上收不到通知

    应用中用到了通知功能,同时有远程通知和本地通知. 测试报告应用在iphone6 plus上,收不到本地通知. 因为所有的第三方闹钟应用采用的都是本地通知方式,所以第一时间随机下载了5款不同的闹钟应用. ...