js中变量及函数的提升

js中变量及函数的提升

思考:下列代码输出什么
在这里插入图片描述
结果: 控制台输出:1
为什么???
这就涉及到js中变量和函数的提升了。
js在解析代码时,会将所有变量的声明和函数提升到作用域的最前面。而函数的提升在所有变量声明的前面。注意:js只将变量的声明提升,它的值还留在原来的位置。且函数也只提升函数声明。
因此,上面图片中的代码经js提升后:

	function test() {
		function a() {
        }
        var a;
        a = 1;
        console.log(a);     //输出1
    }
    test();

注意事项
1、js只提升变量的声明,不提升变量的值

  console.log(a);
    var a = "aaa";

结果:
控制台输出:undefined

原因:
经js提升后:

	var a;
	console.log(a);
	a = "aaa";

js只提升变量的声明,不提升变量的值,由于执行console.log(a)时只声明了变量,还未给它赋值,因此输出undefined

2、变量的提升是根据变量的作用域而提升的,因此局部变量是在函数内提升。

   test();
   function test() {
       console.log(a);      //输出undefined
       var a =1;
   }
    console.log(a);         //报错

3、隐式全局变量不会被提升
例1:

 	console.log(a);
    a = "a";

结果:会报错
在这里插入图片描述
例2:

	function test() {
        var b=10;
        c=20;
    }
    console.log("1---"+c);
    test();
    console.log("2---"+c);         //当把第一个console.log注释后,该行在控制台输出20

结果:
在这里插入图片描述
因为不管是在函数内还是函数外,隐式变量都不会被提升。函数内的隐式全局变量不会被提升到函数外,也不会提升到函数内的最前面。只有当函数被调用后才能使用这个隐式全局变量。

4、创建函数有两种方式:函数声明和函数表达式。而函数提升只提升函数声明。

	//函数声明
    function test() {
        
    }
    
    //函数表达式
    var test2 = function () {

    }

例如:

 	test();
    test2();

    //函数声明
    function test() {
        console.log("test");
    }

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

结果:
在这里插入图片描述
原因:经js提升后:

	function test() {
        console.log("test");
    }
    var test2;       //test2是一个变量,因此要提升
    test();
    test2();           //此时,test2只声明了,还未赋值,还不是一个方法       
    test2 = function () {
        console.log("test2");
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值