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语句记录了不同的值,唯一的区别是变量在一个地方被赋值,而在另一个地方没有。
你能告诉我两段代码片段是如何分解的,考虑到吊装,关闭或任何可以应用的代码片段。
答案 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