js变量提升与函数提升

举个栗子:
function foo() {
    alert("global foo");
}
function bar() {

    alert("global bar");
}
var v = "global var"; //定义全局变量
function hoistMe() {

    alert(typeof foo);
    alert(typeof bar);
    alert(v);
    foo();
    bar();
    function foo() {
         alert("local foo");
    }
    var bar = function() {
          alert("local bar");
    }
    var v = "local";

}
(function() {
     hoistMe();
});
//函数表达式和变量表达式只是其声明被提升,函数声明是函数的声明和实现都被提升。
/**由于函数提升的效果,hoistMe方法相当于
function hoistMe()
{
     //函数声明,变量foo以及其实现被提升到hoistMe函数顶部
     function foo() { alert("local foo"); }
     //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升(同变量提升)
     var bar = undefined;
      //变量声明被提升
     var v = undefined;
     alert(typeof foo); //function
     alert(typeof bar); //undefined
     foo(); //local foo
     bar(); //报错,缺少对象
     bar = function() {
          alert("local bar");
      };
      v = "local";
}

posted @ 2018-03-12 21:22  always_strive  阅读(115)  评论(0编辑  收藏  举报