javascript常见错误(1)

本文通过具体示例解释了JavaScript中变量提升的概念,展示了函数声明与函数表达式在提升过程中的不同表现,并探讨了变量声明提升所带来的运行时错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看下面的代码:

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

在编辑器后运行后返回“TypeError”

为什么不是 “foobar”?

原因出在

 var foo=function foo() {
return “foobar”
};

第一个代码块的第二行foo变量“被提前”了,但是它的赋值(也就是函数)并没有被提前,所以变量声明的时候还没有这个函数。
从这一点上来说,和前面我们所讲的变量“被提前”是完全一致的,并且,由于“被提前”的变量的默认值是 undefined。

总结:
函数声明可以被提前,但函数表达式不能被提前

写成下面的样子就没什么问题:

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

下面在牛客网看到的这个代码同理

var name=’World!’;
(function() {
if(typeof name===’undefined’) {
var name=’Jack’;
console.log(‘Goodbye’+name);
} else {
console.log(‘Hello’+name);
}
})();

输出结果为:Goodbye Jack
原因同上,也是变量声明提升的问题。

(function(){
        var name;//注意这里,变量提升
    if(typeof name === 'undefined'){
        name = 'Jack';
        console.log('Goodbye'+name);
    }else{
        console.log('hello'+name);
    }
})();

变量生明会提升到当前作用域的顶部,一个函数就是一个作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值