js函数声明提升和变量声明提升

1、创建函数的方法

<!--函数声明-->
function func1(){

    }

<!--函数表达式-->
var func2 = function(){

    }

<!--函数对象的声明-->
var func3 = new Function()

2、函数声明提升

func1();
function func1(){

    }
    
func2(); // Uncaught TypeError: func2 is not a function
var func2 = function(){

    }
    
func3(); // Uncaught TypeError: func2 is not a function
var func3 = new Function()

从代码中,可以看出函数声明func1没有报错,但是func2、func3的执行会报错, 说明函数声明会被提升到作用域顶部,但函数表达式、函数对象声明不会。

3、变量声明提升(只有var声明的变量才有变量提升,let、const无;变量赋值无提升)

console.log(a) // undefined
console.log(b) // Uncaught ReferenceError: Cannot access 'b' before initialization
console.log(c) // Uncaught ReferenceError: Cannot access 'c' before initialization
var a = 1;
const b = 2;
let c = 3;

4、两种情况的优先级(函数声明优先于变量声明提升)

例子1:
var func = 10
console.log(func , typeof(func)) // 10 number
function func () {
    }

实际提升结果如下:

function func() {
    
}
var func;
func = 10;
例子2:
num = 10
function func () {
    window.num = 5
    console.log(num)
    var num
    console.log(window.num)
}
func() // undefined 5

实际提升结果如下:

function func(){
    var num
    window.num = 5
    console.log(num)
    console.log(window.num)
}
var num
num = 10
func()

首先第一个console会在当前作用域中寻找num,因为变量声明提升所以为函数内的num,即undfined,外部的num则是一个全局变量,并且赋值为10

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值