对于 JS 中 变量提升和函数声明提升的一个概括 :

这篇文章对于 JS 中 变量提升 和 函数声明提升 做一个简单的概括 :  

参考链接 : https://blog.csdn.net/qq_40856225/article/details/82916382

 


  • 变量的 定义 :

ES6 之前可以使用 var 关键字来定义一个变量;如果变量未初始化,则变量的值为 undefined;

  • 变量的 作用域
  1. 根据变量作用域可以分为全局变量和局部变量;全局变量的作用域为全部作用域;局部变量作用域为函数内;
  2. 根据变量作用域可以分为全局变量和局部变量;全局变量的作用域为全部作用域;局部变量作用域为函数内;
  3. JS 变量声明中,若不使用 var 关键字,则声明的变量为全局变量。因此可以用这种方法定义全局变量,但是不推荐这种做法,因为在局部作用域中定义的全局变量很难维护。
  • 变量的 提升 :
var name="bob";
function getName1(){
    console.log(name)//当函数运行的时候函数会向上查找name的值,当找到就返回,找不到就继续往上查找
}
function getName2(){
    //在该函数中,由于变量提升,在函数内部name被声明为局部变量,但没有初始化
    console.log(name);//undefined
    var name="jack";
    console.log(name)//jack
}
 
//理解第一个name输出undefined;上面getName等价于下面函数========================================
function getName2(){
    var name;              //在这里name的变量提升了,未初始化的值为undefined
    console.log(name);     //undefined
    name="jack";
    console.log(name)      //jack
}
  • 变量 初始化 不会提升 :
var x = 5; // 初始化 x
console.log(x);           //输出5
console.log(y);           //输出undefine
var y = 7; // 初始化 y
  • 函数声明 的方式创建函数  :
//通常情况下,我们要先定义函数,再调用函数,才可以执行 
//函数声明方式定义函数 
function getName(){
    console.log("bob")
}
getName()           //输出  bob
 
----------------------------------------------------------------------------

//这种情况先调用后声明也可以使函数执行
//因为在函数声明有一个重要的特征就是函数声明提升
getName()           //输出  bob
function getName(){
    console.log("bob")
}                 
 
  • 函数表达式 的方式创建函数  :
var getName=function(){
    console.log("bob")
}
getName()          //输出    bob
 
--------------------------------------------------------------------------
 
//说明函数表达式方式定义的函数,没有函数声明提升的特性
getName()          //报错   Uncaught ReferenceError: getName is not defined(…)
var getName=function(){
    console.log("bob")
}               
  • 同时具有 函数声明提升变量提升 的例子 :
function getName (){
    console.log("jack");          //函数声明提升到顶部
} 
var getName;                     //变量声明提升
getName = function(){
    console.log("bob");
}                                //此时函数的值将上面的值覆盖 
getName();                       //输出bob

函数声明  function getName(){} 的声明会被提前到顶部。而函数表达式  var getName = function(){} 则表现出变量声明提升。因此在这种情况下,getName 也是一个变量,因此这个变量的声明也将提升到顶部,而变量的赋值依然保留在原来的位置。需要注意的是,函数优先,虽然函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值