在Javascript中提升函数和变量存在问题,任何人都可以帮助我吗?

时间:2014-12-09 04:57:47

标签: javascript

我一直在尝试理解javascript中提升函数和变量的概念,我发现这篇优秀的文章http://javascriptissexy.com/javascript-variable-scope-and-hoisting-explained/?WPACFallback=1&WPACRandom=1417555130400,但我有一些我仍然无法解决或理解的东西:

var myName = "Xavier";

function myName(){
    console.log("Mi nombre es Javier");
}
console.log(typeof myName); //this suppose to print "string" but insted I get "function".

根据我从文章中读到的内容,Javascript执行以下操作:

var myName;

function myName(){
    console.log("Mi nombre es Javier");
}
myName = "Xavier";
console.log(typeof myName); //prints "string"

根据提升的原则,两个变量声明和一个函数声明被提升到它们定义它们的范围的顶部。

对任何可以帮助我的人,提前谢谢。

5 个答案:

答案 0 :(得分:1)

引用你提到的文章

  

函数声明和变量声明都被提升到包含范围的顶部。函数声明优先于变量声明(但不是变量赋值)

我通过在firefox中运行它来测试你在问题中提到的第一个代码块,我得到的输出是" string"正如所料。

此代码将提供输出"功能"。

var foo;
function foo(){

}
console.log(typeof(foo));

PS:请提及您用于运行代码的环境。只有这样我才能进一步帮助你。

答案 1 :(得分:0)

当我仔细阅读文章时,我明白了这一点 - 功能声明覆盖变量声明 函数声明和变量声明都被提升到包含范围的顶部。函数声明优先于变量声明(但不是变量赋值)。 这有帮助吗?

答案 2 :(得分:0)

正如文章所说的那样吗? http://jsfiddle.net/txhu587b/

var myName = "Xavier";

function myName(){
    console.log("Mi nombre es Javier");
}
console.log(typeof myName); //prints string

答案 3 :(得分:-1)

JavaScript只提升声明,而不是初始化。

var x = 5; // Initialize x
var y;     // Declare y

答案 4 :(得分:-1)

您发布的代码

var myName = "Xavier";

function myName() {
    console.log("Mi nombre es Javier");
}
console.log(typeof myName); //string

完全按照您的预期工作,因为myname确实是字符串。请看看 JSFiddle