Javascript 为什么下面的代码段没有';你不会在JS工作吗?

Javascript 为什么下面的代码段没有';你不会在JS工作吗?,javascript,scope,Javascript,Scope,代码如下: var myVar = { test:function(){ alert('hello'); }, myinternalObj: { internalTest: myVar.test } }; 为什么在javascript中我无法将myVar.test分配给internalTest?myVar.test在分配(对象文本)之前进行评估到myVar,因此myVar是未定义的,访问undefined或null上

代码如下:

var myVar = {
    test:function(){
       alert('hello');        
    },
    myinternalObj: {
        internalTest: myVar.test
    }
};

为什么在javascript中我无法将myVar.test分配给internalTest?

myVar.test
在分配(对象文本)之前进行评估到
myVar
,因此
myVar
是未定义的,访问
undefined
null
上的属性会导致错误。

myVar.test
在赋值(对象文本)之前进行评估到
myVar
,因此
myVar
未定义,访问
undefined
null
上的属性会导致错误。

当引擎读取myVar.test时,它还没有值当引擎读取myVar.test时,它在
internalTest:myVar.test
行中还没有值,myVar尚未定义(您仍在使用属性
internalTest
定义它)

您需要将代码更改为

var myVar = {
    test:function(){
       alert('hello');        
    }
};
myVar.myinternalObj = {
    internalTest: myVar.test
};

internalTest:myVar.test
行中,尚未定义myVar(您仍在使用属性
internalTest
定义它)

您需要将代码更改为

var myVar = {
    test:function(){
       alert('hello');        
    }
};
myVar.myinternalObj = {
    internalTest: myVar.test
};

myVar
在它自己的定义中是未知的,您应该写:

var myVar = {
    test:function(){
       alert('hello');        
    }
};
myVar.myinternalObj = { internalTest : myVar.test };

myVar
在它自己的定义中是未知的,您应该写:

var myVar = {
    test:function(){
       alert('hello');        
    }
};
myVar.myinternalObj = { internalTest : myVar.test };

这是因为您在myinternalObj中引用的对象尚未初始化

一个更简单的版本看起来像

var object = {a:'a', b: object.a};

当您在其内部引用对象时,该对象的初始化尚未完成。

这是因为您在myinternalObj中引用的对象尚未初始化

一个更简单的版本看起来像

var object = {a:'a', b: object.a};

当您在对象内部引用它时,对象的初始化未完成。

这是因为设置了myinternalObj时,仍在设置myVar


你到底想实现什么。我想你的代码可以重构。

这是因为当设置myinternalObj时,myVar仍在设置中


你到底想达到什么目的。我想你的代码可以重构。

在JS控制台中,以下功能可以正常工作:

> var myVar = {}
undefined

> myVar.test = function() { alert('hello'); }
function () { alert('hello'); }

> myVar.myinternalObj = { internalTest: myVar.test }
Object

> myVar.myinternalObj.internalTest();
//shows the alert

以下内容在JS控制台中工作:

> var myVar = {}
undefined

> myVar.test = function() { alert('hello'); }
function () { alert('hello'); }

> myVar.myinternalObj = { internalTest: myVar.test }
Object

> myVar.myinternalObj.internalTest();
//shows the alert