<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. STM32中的PWM的频率和占空比的设置

    转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解:   TIM3的ARR寄存器和 ...

  3. linux sed的使用

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理, 可以将数据行进行替换.删除.新增.选取等特定工作. sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  4. 【转】Qt下使用glut库

    ps:这个说的很明白,尤其是win10环境下用mingw环境时编程时碰到的问题, 1.加 windows.h 2.在.pro 添加libs     博文地址:Qt下使用glut库   本人使用的环境 ...

  5. 腾讯优测优分享 | Android性能测试工具化实现

    腾讯优测专业的移动云测试平台,自动化测试提供性能测试数据,云真机实时输出性能数据,让测试更简单! 1.Android性能测试介绍 提到Android性能测试,我们总免不了俗地要首先介绍下Android ...

  6. gulp基本用法

    嗨,小伙伴们,大家周五好,又到了一周中最最最期待的周五啦啦~~~ 这几天一直在研究gulp的使用方法,今天抽时间来整理一下基本步骤. gulp 的使用流程: 安装nodejs ->安装git(方 ...

  7. HTML5上传图片到ASP.NET.MVC

    @{ ViewBag.Title = "Home Page";} <!DOCTYPE HTML PUBLIC><html><head> < ...

  8. Spring可以将简单的组件配置

    这次听了老师的课程,觉得还是需要更加集中的去把各种题进行一个分类吧,然后有针对的去准备,虽然据说这一块在面试中也不容易考到,但是毕竟是难点,还是需要好好准备一下的.因为在dp这个方面,我算是一个比较新 ...

  9. ionic2配置问题集

    我在配置ionic2中遇到的问题,及我的解决方案. ionic start MyIonic2Project tutorial --v2 网络很坑爹,配置lantern后,也是多次尝试才下载成功. io ...

  10. 转:在Android中使用AlarmManager

    原地址http://blog.csdn.net/maosidiaoxian/article/details/21776697 AlarmManager是Android中的一种系统级别的提醒服务,它会为 ...