博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变量提升和函数提升,创建同名变量,同名函数,同名表达式的情况,全局变量和局部变量重名...
阅读量:4595 次
发布时间:2019-06-09

本文共 1526 字,大约阅读时间需要 5 分钟。

一.定义和声明

1.对于变量来说,定义就是声明。

       例如:int  a  ;

       我们可以说它是定义也可以说是声明

2.对于函数来说,声明和定义完全不是一回事

        void sum(int a,int b);  --函数的声明

        void sum(int a,int b){ }; --函数的定义

二.重复声明同一个变量

var a = 1;var a = 2;console.log(a); // 2
var a = 1;var a;console.log(a); //1
  从变量提升的角度去理解,上面的代码经过变量提升就可以改写成下面这样,因为变量提升只提升声明不提升赋值
var a;var a;a = 1;console.log(a);

  参考《JavaScript高级程序设计》第7.3章节,原话如下

   JavaScript从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它只会对后续的声明视而不见(不过,它会执行后续声明中的变量初始化)。

三.有俩个同名方法

function foo() {    console.log('foo1');}foo();  // foo2function foo() {    console.log('foo2');}foo(); // foo2

      在js里同时有两个相同的函数方法时,在调用该方法时并不好报错,会默认调用最后一个同名方法(涉及到函数提升)

四.两个同名的函数表达式

var foo = function () {    console.log('foo1');}foo();  // foo1var foo = function () {    console.log('foo2');}foo(); // foo2
  函数表达式则不会有提升(此处实质为变量提升)

五.变量提升和函数提升

1.变量提升

       在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。全局变量提升到全局作用域的最开始,函数中的局部变量则提升到函数的最开始。

     (注意:函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!)

2.函数提升

       js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!  例子可对比上面第三点和第四点。

六.全局变量和局部变量重名

 1.定义全局变量和局部变量,变量名都是age。在函数内部不对局部变量age赋值

var age = 250;//定义一个全局变量age,赋值为250function testf(){    console.log("testf:age="+age);//age是局部变量,因为有变量声明提升,所以age是undefined;    var age;//定了一个局部变量age,没有赋值。}

2.定义全局变量和局部变量,变量名都是age。在函数内部对局部变量age赋值

var age = 250;//定义一个全局变量age,赋值为250function testf(){    console.log("testf:age="+age);//age是局部变量,因为有变量声明提升,所以age是undefined;    var age=300;//定了一个局部变量age,并赋值为300。    console.log("testf:age="+age);//300}

 

转载于:https://www.cnblogs.com/zhoujingguoguo/p/10192336.html

你可能感兴趣的文章
ECMAScript6-let和const命令
查看>>
常见Jquery问题
查看>>
jsp统计页面访问量和刷访问量的简单使用
查看>>
调试的新花招,利用firebug动态加载js库文件
查看>>
Unity3d的序列帧动画
查看>>
获取ScrollView的onScrollListener
查看>>
约数的个数
查看>>
Visual Studio 2008 具有一些新的报表功能和改进之处
查看>>
python环境错误
查看>>
CentOS 6.5优化开机启动服务
查看>>
mk文件配置第三方jar包,so文件
查看>>
Maven 进阶讲解(聚合)
查看>>
练习-模拟账号登录
查看>>
JDK(java development kit java开发工具包)的安装
查看>>
POJ 3233 - Matrix Power Series(矩阵快速幂)
查看>>
J-Robot,能走、能跳舞的机器人
查看>>
linux 下c语言调用终端命令
查看>>
orale中如何获取当前月份?
查看>>
程序设计语言.
查看>>
How to find First Non-Repeated Character from String
查看>>