javascript --- > 变量提升的理解

看下面一段代码:

(function () {
    var x = foo();
    var foo = function foo () {
        return "foobar";
    };
    return x;
})();

(不许打出来)猜猜返回结果是什么…
在这里插入图片描述
答案是

// foo is not a function

下面来解释为什么会这样,首先得明白:
1.如果变量声明了但未赋值,则会显示undefined
在这里插入图片描述
2.如果给一个声明的变量赋值一个未定义的函数(bar)的执行结果.会显示bar is not a function
在这里插入图片描述
3.在函数中,函数及变量的声明(var)都会被提升到顶部
在这里插入图片描述
明白了这些之后,回到最初的栗子:
外层是一个立即执行函数(function(){ … })()
中间部分:

var x = foo();
var foo = function foo() {
    return "foobar"
};
// 以上代码实际等价于下面;
var x, foo;
x = foo();
foo = function foo(){
    return "foobar"
};

当执行到 x = foo()时, 由于foo不是一个函数.故会抛出错误(foo is not a function).函数停止执行.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值