在执行上下文的创建阶段如何加载javascript对象和javascript函数?

时间:2019-07-10 06:31:33

标签: javascript javascript-objects

我仍在探索JavaScript的怪异部分,遇到了这个问题。

我知道在执行上下文的创建阶段,所有变量最初都被设置为undefined,但是这些函数全部都已加载到内存中。并且所有函数都是javascript中的对象。因此,当我编写以下代码时,结果并不令人满意。

//Code-1

console.log(fun1.exp);
function fun1(){
    console.log("Hi");
}
fun1.exp = "funnn";



//Code-2

console.log(obj.name);
var obj = {
    "name" : "Albert"
};

代码1的输出:

  

未定义

代码2的输出:

  

未捕获的TypeError:无法读取未定义的属性“名称”

预期:当两个都是对象时,它们的输出不应该相同吗?

1 个答案:

答案 0 :(得分:1)

函数声明被挂起,但是任何涉及赋值(=)的东西都没有。对于解释器,您的第一个代码等效于

function fun1(){
  console.log("Hi");
}
// END OF HOISTING OF FUNCTION DECLARATIONS

console.log(fun1.exp);
fun1.exp = "funnn";

fun1.exp行在console.log之后,因此fun1.exp在登录时为undefined

您的第二个代码等效于

// END OF HOISTING OF FUNCTION DECLARATIONS
// (no hoisting at all here, since there are no function declarations)

console.log(obj.name);
var obj = {
  "name" : "Albert"
};

没有悬挂普通物品;只有函数声明(使用function关键字但缺少=的函数)。