<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. JSON入门

    一.简介     1.描述         1)JavaScript 对象表示法(JavaScript Object Notation) 2)存储和交换文本信息的语法.类似 XML 3)比 XML 更 ...

  2. C#中as用法

    在程序中,进行类型转换时常见的事,C#支持基本的强制类型转换方法,例如 Object obj1 = new NewType();NewType newValue = (NewType)obj1;这样强 ...

  3. js数字时钟

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 转换成的jar文件接收后台的信息乱码cmd解决办法

    运行——cmd——    java -jar -Dfile.encoding=utf-8 xxx.jar

  5. http://note.youdao.com/yws/public/redirect/share?id=2bc2dc6c7df6013e9f8106c005da999a&type=false

    Welcome to MarkdownPad 2 MarkdownPad is a full-featured Markdown editor for Windows. Built exclusive ...

  6. php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十

    /* 额,重新修改了下.现在估计没什么问题了.... */ 直接上实例 写到 千亿上了. /** * @author ja颂 * 把数字1-1亿换成汉字表述,如:123->一百二十三 * @pa ...

  7. EXTJS4.2中neptune主题的使用

    原文地址:http://blog.csdn.net/xieguojun2013/article/details/8880519 最近在在sencha.com官网了解到EXTJS的最新版本里增加了新的主 ...

  8. linux命令之三

    0102 文档查阅指令 cat tac nl 简单查阅,-n  可显示行 more, less less is more 查询大文件,可分页. head tail 从头尾看.-n 限制行数. taif ...

  9. hadoop作业缺少jar文件解决办法

    1 可以使用maven把插件带入 2 把jar放到集群的jar文件目录下,然后重启集群

  10. CE 定时器

    //头文件: afx_msg void OnTimer(UINT_PTR nIDEvent); //声明定时器响应函数 //代码文件: #define TIMER 1 #define TIMEROUT ...