javascript常见错误(1)

来源:互联网 发布:wdcp 安装多版本php 编辑:程序博客网 时间:2024/06/05 21:01

看下面的代码:

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

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

0 0