JS基本问题

本文探讨了JavaScript中作用域的概念及其对变量的影响,并详细解释了声明提升如何工作。通过两个示例,展示了变量声明与函数声明在执行过程中的行为差异。
  1. 问题1:Scope作用范围

     考虑下面的代码

  (function(){
      var a=b=5;
  })();
  console.log(b);   

  什么会被打印到控制台上?

  回答:上面代码会打印5.

  诀窍:这里有两个变量声明,但a使用关键字var声明的,代表它是一个函数的局部变量.与此相反,b变成了全局变量.

 诀窍:它没有启用严格模式,代码会引发ReferenceError的错误,b没有定义(b is not defined).请记住,严格模式,则需要明确指定,才能实现全局变量声明.比如,你应该写:

  (function(){
  "use strict";
      var a=window.b=5;
  })();
  console.log(b);

2.问题2.声明提升

执行这段代码,输出什么结果.

  function test(){
    console.log(a);
    console.log(foo());
    var a=1;
    function foo(){
    return 2;
    }
 }

回答:这段代码的结果是undefined和2.

原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值.因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是undefined.换句话说,上面的代码等同于以下内容:

    function test(){
    var a;
    function foo(){
    return 2;
    }
    console.log(a);
    console.log(foo());
    a=1;
 }

 test();

转载于:https://my.oschina.net/sai20150901/blog/801835

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值