变量提升和函数提升

1.变量提升和函数提升一般会出现在先使用再声明的情况下,例如:

console.log(x);

var x=1;

这个时候由于变量为先声明就使用则会导致变量提升,所以上述代码应该如下解析:

var x;

console.log(x);

x=1;

2.匿名函数出现变量提升

匿名函数不会出现函数提升,只会出现变量提升,如下:

var getName=function(){
  console.log(2);
}

function getName(){
  console.log(1);
}

getName();

很多人可能会以为结果是1,结果是2,解析如下:

function getName(){    //函数声明提升到顶部
  console.log(1);
}

var getName;    //变量声明提升
getName = function(){    //变量赋值依然保留在原来的位置
  console.log(2);
}

getName();  

3.函数声明和函数表达式的区别

function jsFun6(){  //函数声明和函数表达式的区别
    
    test1();//函数声明提升,在执行代码之前会先读取函数声明,不会报错
    function test1(){//函数声明方式创建函数
        alert("测试1");
    }
    
    //test2();报错,函数还不存在
    console.log(test2)//不会报错,变量提升只是提升变量的声明,并不会把赋值也提升上来,输出undefined
    var test2=function(){
        alert("测试2");
    };//使用函数表达式创建一个匿名函数(实际是以变量test3命名的函数)
    test2();//不会报错,以创建函数
                
    var test3=function(){
        alert("测试3");
    }();//加了括号立即执行
    
    var test4 = 12;// !注意看,一旦变量被赋值后,将会输出变量
    //函数提升优先级高于变量提升,所以函数先提升,然后变量提升覆盖之前的函数声明,表                
    //现为变量
    function test4() {
        alert("测试4");               
    }
    console.log(test4); //12

    var test5="test5_1";
    (function(){
        //js中的变量搜索顺序:找变量时,先找局部变量,如果没有局部变量;再找全局变量。
    alert(test5);//此时的test5为局部变量的提升,undefined
    var test5="test5_2";
    })();
                
}

4.变量和函数同名,函数优先级高于变量,函数可以被赋值。例如:

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

//解析如下

function a(){
    console.log(2)
}
var a;
console.log(a);  //这个时候是a()和a都存在,但是函数优先级高于变量所以下一个console打印的是a()
console.log(a());
a=1;
a=3;
console.log(a);
console.log(a()); //由于这个时候a()被覆盖了,所以报错
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值