我一直在尝试理解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"
根据提升的原则,两个变量声明和一个函数声明被提升到它们定义它们的范围的顶部。
对任何可以帮助我的人,提前谢谢。
答案 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