Javascript - 怎么破坏了?

时间:2015-01-31 19:05:12

标签: javascript hoisting

var myName = 4;

function myName() {
    console.log("xxxx");
}
console.log(typeof myName); //Number

var myNamex;

function myNamex() {
    console.log("xxxx");
}
console.log(typeof myNamex); //function

请参阅小提琴 - http://jsfiddle.net/s8a7m1hk/

console.log(typeof myName);

上面的log语句记录了不同的值,唯一的区别是变量在一个地方被赋值,而在另一个地方没有。

你能告诉我两段代码片段是如何分解的,考虑到吊装,关闭或任何可以应用的代码片段。

2 个答案:

答案 0 :(得分:3)

一旦你以正确的顺序进行吊装,你的问题就很简单了。有效地,您的代码如下所示:

function myName() {
    console.log("xxxx");
}

function myNamex() {
    console.log("xxxx");
}

var myName;
var myNamex;

myName= 4;

console.log(typeof myName); //Number

console.log(typeof myNamex); //function

所有声明(var语句和函数声明)都被提升到顶部。价值4的分配不会被提升,因此会在声明后发生,因此myName在记录时为4。您永远不会将任何其他值分配给myNamex,因此它不会更改,仍然是函数。

答案 1 :(得分:0)

规范将告诉您精确的算法。下面,context是封闭[[Scope]]的{​​{1}}或全局对象。

这大致是发生的事情:

LexicalEnvironment