首页 > Web开发 > 详细

【JS】函数提升变量提升以及函数声明和函数表达式的区别

时间:2019-03-12 13:21:39      阅读:231      评论:0      收藏:0      [点我收藏+]

今天看js的变量提升问题,里面提到了函数提升。然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错

一、变量提升

console.log(a)
var a=100 //undefined
console.log(a)//100

 

提升后相当于

var a; //变量提升,全局作用域范围内,此时只是声明,并没有赋值
console.log(a); //undefined
a=100 //此时赋值
console.log(a) //100

 

二、函数提升

注意:js中创建函数有两种方式:函数声明和函数表达式。只有函数声明才能函数提升!!!

(因为之前一直没有分清函数声明和函数表达式,所以在函数提升上经常出错 ==)

先简单认识下函数声明和函数表达式

  //函数声明
  function fn1(){
    console.log(12)
  }
  //函数表达式
  var fn2 = function () {
    console.log(222)
  }
f1() //123
f2() //error:f2 is not a function
// 函数声明
function f1() { 
  console.log(123)
}
// 函数表达式
var f2 = function() {
  console.log(222)
}

提升后

// 函数声明-----提升
function f1() { 
  console.log(123)
}
var f2;
f1() //123
f2() //error:f2 is not a function
// 函数表达式
f2 = function() {
  console.log(222)
}

 

2.1函数声明提升

fn(‘zhangsan‘) //zhangsan 20
  function fn(name) {
    age = 20
    console.log(name,age)
    var age
  }

 

提升后相当于

function fn(name) {
    var age; //变量提升,定义age
    age=20; //变量赋值
    console.log(name,age)
  }
  fn(‘zhangsan‘)

2.2函数表达式

  fn1(‘lisi‘)//fn1 is not a function
  var fn1=function (name){
    age = 20
    console.log(name,age)
    var age
  }

提升效果

  var fn1;
  fn1(‘lisi‘)//fn1 is not a function
  fn1=function (name){
    var age;
    age = 20
    console.log(name,age)
  }

 

【JS】函数提升变量提升以及函数声明和函数表达式的区别

原文:https://www.cnblogs.com/SidselLoong/p/10515809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!