变量声明和函数声明

118 阅读2分钟

例子

console.log(a)
var a = 1
var a = function() {
    console.log(2)
}
function a() {
    console.log(3)
}

// 浏览器输出:function a() { console.log(3) } 

解析

  1. 变量提升和函数提升:就是将声明的变量或者函数,提升至所在作用域的顶部
  2. 函数声明优先级高于变量声明
  3. js 声明函数的方式有3种
  4. 变量是先声明,再赋值
console.log(a)
// 变量声明
var a = 1
// 函数表达式
var a = function() {
    console.log(2)
}
// 函数声明
function a() {
    console.log(3)
}

// 上述代码实际执行过程
// 1.函数声明的提升优先级高于变量声明
function a() {
    console.log(3)
}
console.log(a)
// 2.变量先声明,再赋值
var a
a = 1
a = function() {console.log(2)}

更多练习

juejin.cn/post/684490…

js 声明函数的3种方式

函数表达式:将函数定义为表达式语句(通常是先进行变量声明,再执行赋值语句)。

  1. 函数表达式是可以命名的,也可以是匿名的。匿名则被认为是匿名函数,即使是命名的,函数名也只能在自身函数作用域中使用
  2. 函数表达式可以存储在变量或对象属性中
var a = function fn() {
    console.log('带函数名的函数表达式');
    console.log(fn);
}
a()
// 带函数名的函数表达式
// [Function: fn]
fn()
// ReferenceError: fn is not defined
// 因为函数表达式的函数名,只能在自身函数作用域中使用

函数声明:定义时必须以function开头,是一种独立的结构,会声明一个具名函数。

  1. 函数声明一定会进行函数提升,使其能在它所在作用域的任意位置被调用
  2. 该函数可以通过函数名赋值给变量和对象属性

Function构造器:使用Function构造器创建函数,不推荐

//Function()构造器
var f =new Function()

// 函数表达式
var f = function() {
      console.log(1);  
}

// 函数声明
function f (){
     console.log(2);
}

console.log(f())  //1
// function() {console.log(1)} 这条函数表达式是最后执行的,所以最后输出的是1