变量提升、函数提升

  如果熟悉js代码执行的过程,这个问题不难理解

一、变量提升

  ES5中没有块作用域,有全局作用域、局部作用域(函数)等

// 不声明定义变量
console.log(name)  //报错,变量没有定义

// 变量提升
console.log(info) // undefined,不报错
var info = "hello";

function fun(){
    console.log(a) // undefined,不报错
    var a = 'world'
    console.log(a) // world 
}
fun();

之所以出现这种情况,是因为变量提升导致的;上述过程相当于:

var info; // 先声明变量,没有赋值

function fun(){
    var a; // 声明变量,没有赋值
    console.log(a) // undefined,不报错
    a = 'world'
    console.log(a) // world 
}

// 不声明定义变量
console.log(name)  //报错,变量没有定义声明

// 变量提升
console.log(info) // undefined,不报错
info = "hello";

fun();

 

二、函数提升

  创建函数有三种方式:

    1.函数声明

    2.函数表达式

    3.使用Function对象创建(不推荐使用)

  只有在“函数声明”方式中,函数才会提升。

  函数提升:执行函数代码时,先执行函数声明;

// 只有函数声明形式才会函数提升
sayHello(); // 不会报错,正常执行

function sayHello(){
     console.log("hello !")  
}

fun(); // 报错(undefined is not a function) ,此时fun是个变量,虽然会变量提升,但在此行值为undefined;undefined不是函数,因此这句报错
var fun = function(){}

  相当于如下:

function sayHello(){
     console.log("hello !")  
}

var fun;

sayHello(); // 不会报错,正常执行

fun(); // 此时fun值为undefined,报typeError

fun = function(){}

 

转载于:https://www.cnblogs.com/RocketV2/p/6531819.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值