在这些代码中,如何使用执行上下文来解释输出结果?
In these codes,how to explain the output result using execution context?
var obj={
say: function(){
console.log(obj); // undefined
}()
};
终于输出了undefined
。我开始用执行上下文的知识来解释它,但是我对什么时候在上下文中创建方法感到疑惑。
我知道进入context后,首先进入创建阶段,有一个包含变量和函数的变量对象declarations.Next进入执行阶段,完成varibale和[=29的赋值=] 在这个例子中,我们:
首先进入全局执行上下文的创建阶段,obj
为undefined
。
接下来,在创建阶段之后,我们进入execute phase.The代码开始执行并且obj
现在指向一个object.However,在上面的过程中,当say
方法是created?是全局执行的创建阶段还是全局执行的执行阶段?
(如果在创建阶段,那么全局执行上下文的变量对象应该是AO={ obj:undefined,say: referencce to <function>}
)
或者有没有更好的方法来解释为什么这里的结果是 undefined
?我在网上查了一下,看到有人说这是因为hoisting.Is是对的?
因为你是直接调用函数,没有给obj赋值。比较底部代码段中的两种情况:
var obj = {
say: function() {
console.log(obj); // Not undefined since it will run after obj is assigned
}
};
obj.say();
var objUndef = {
say: function() {
console.log(objUndef); // undefined
}() // <--- immediately calling
};
在您的示例中,您没有分配函数,而是函数的结果(因为您立即使用 ()
调用它),甚至在分配 obj 之前 运行 。因此,结果是您将 undefined 而不是 obj 值记录到控制台。如果您首先创建该对象,然后使用 obj.say()
调用其 say 方法,则 obj 将被定义,因为您在尝试调用它之前先分配了 obj。
var obj={
say: function(){
console.log(obj); // undefined
}()
};
终于输出了undefined
。我开始用执行上下文的知识来解释它,但是我对什么时候在上下文中创建方法感到疑惑。
我知道进入context后,首先进入创建阶段,有一个包含变量和函数的变量对象declarations.Next进入执行阶段,完成varibale和[=29的赋值=] 在这个例子中,我们:
首先进入全局执行上下文的创建阶段,obj
为undefined
。
接下来,在创建阶段之后,我们进入execute phase.The代码开始执行并且obj
现在指向一个object.However,在上面的过程中,当say
方法是created?是全局执行的创建阶段还是全局执行的执行阶段?
(如果在创建阶段,那么全局执行上下文的变量对象应该是AO={ obj:undefined,say: referencce to <function>}
)
或者有没有更好的方法来解释为什么这里的结果是 undefined
?我在网上查了一下,看到有人说这是因为hoisting.Is是对的?
因为你是直接调用函数,没有给obj赋值。比较底部代码段中的两种情况:
var obj = {
say: function() {
console.log(obj); // Not undefined since it will run after obj is assigned
}
};
obj.say();
var objUndef = {
say: function() {
console.log(objUndef); // undefined
}() // <--- immediately calling
};
()
调用它),甚至在分配 obj 之前 运行 。因此,结果是您将 undefined 而不是 obj 值记录到控制台。如果您首先创建该对象,然后使用 obj.say()
调用其 say 方法,则 obj 将被定义,因为您在尝试调用它之前先分配了 obj。