您的位置:首页 > Web前端 > JavaScript

javascript常见错误(1)

2017-02-15 20:54 387 查看
看下面的代码:

(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);
}
})();


变量生明会提升到当前作用域的顶部,一个函数就是一个作用域
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 函数