【发布时间】:2014-12-09 04:57:46
【问题描述】:
我一直在尝试理解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"
根据提升原则,变量声明和函数声明都被提升到定义它们的范围的顶部。
感谢任何可以帮助我的人,提前致谢。
【问题讨论】:
-
你在什么 javascript 环境中得到这个结果?我刚刚在 Firefox 控制台中尝试过,并在您提供的第一个代码示例(“字符串”)中得到了预期的结果。这是什么浏览器?还是 node.js?您是在文档的顶层还是在函数中执行代码?等等。我很好奇这里发生了什么!
-
你在说什么。 :( (X)哈维尔教授
-
如果你在开发者工具中逐行输入这行,它是行不通的。但是你可以通过将它放在一个独立的函数中来重现它:
function test(){ var x = "string"; function x(){}; console.info(typeof x); }。这将打印“字符串”,因为函数声明确实“更早”发生,请参阅@TigerScott 的答案。 -
如果您不提供更多上下文信息,我们将无法帮助您。到目前为止所有的答案都只是陈述你已经知道的,并没有解决你的问题。
标签: javascript