Javascript 无法设置属性';X';试图赋值时未定义的

Javascript 无法设置属性';X';试图赋值时未定义的,javascript,node.js,Javascript,Node.js,如果你的目标是,那么去检查这个问题 如果您对JavaScript引擎在试图访问某个变量的属性时为什么说该变量未定义感到困惑,那么您可能犯了与我相同的愚蠢错误。继续阅读并检查已接受的答案 我有以下产生错误的代码位: 文件lib.js: var Lib; (function() { var X = "X"; Lib.X = X; })(); module.exports = Lib; 在命令行上运行时: $ node lib.js Node.js产生以下错误

如果你的目标是,那么去检查这个问题

如果您对JavaScript引擎在试图访问某个变量的属性时为什么说该变量未定义感到困惑,那么您可能犯了与我相同的愚蠢错误。继续阅读并检查已接受的答案


我有以下产生错误的代码位:

文件
lib.js

var Lib;

(function() {
    var X = "X";        
    Lib.X = X;
})();

module.exports = Lib;
在命令行上运行时:

$ node lib.js
Node.js产生以下错误:

lib.js:4
    Lib.X = X;
       ^
TypeError: Cannot set property 'X' of undefined
    at <path>\lib.js:4:8
    at Object.<anonymous> (<path>\lib.js:
16:2)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Array.0 (module.js:484:10)
    at EventEmitter._tickCallback (node.js:190:38)
lib.js:4
Lib.X=X;
^
TypeError:无法设置未定义的属性“X”
at\lib.js:4:8
反对。(\lib.js:
16:2)
在模块处编译(Module.js:446:26)
at Object..js(module.js:464:10)
在Module.load(Module.js:353:31)
at函数。_加载(module.js:311:12)
at Array.0(module.js:484:10)
在EventEmitter上进行回调(node.js:190:38)
我可以看出问题出在语句
Lib.X=X。但我不确定这句话是否违反了任何语法/语义规则。我把这行理解为:将
函数X
分配给变量
Lib
的属性
X


我做错了什么?

Lib
未定义。undefined不是对象,因此不能对其设置任何属性。您可能希望在文件的开头显示以下内容:

var Lib = {};

变量
Lib
未定义,因此无法为其赋值

您需要首先定义它,作为一个简单的示例:

var Lib = {};

啊!!你赢了我。在我发布问题几秒钟后,我想到了这一点。15分钟后我们将接受这个答案。@Krumia谢谢,我们都会不时犯愚蠢的错误:p@downvoter:想解释一下原因吗?对销售代表不太感兴趣。但这是否表明没有研究成果?还是不清楚?还是没用DI没有投反对票,但这似乎是一个主题明确的问题——即使这是一个简单的被忽视的问题。是的,没有必要保持开放,但这与链接问题无关。这是一个愚蠢的错误,应该被归类为印刷错误(如果我没记错的话,这是一个结束类别,但我无法在结束投票中找到)。我投票结束这个问题,因为这是一个愚蠢的错误,因此应该结束。这与链接(假设重复)问题无关。谢谢@Brendan:+1ed。然而,接受西蒙扎克的回答,因为他比你早几秒钟@克鲁米亚真的很难成为第一名。:)谢谢