Javascript中的命名空间问题

时间:2016-09-04 14:39:24

标签: javascript namespaces

我尝试使用命名空间将常规函数转换为函数。这是常规功能:

surprise();    

function surprise() {
    alert('TEST');
}

这与命名空间的功能相同:

var namespace = {};

namespace.surprise();

namespace.surprise = function () {
    alert('TEST');
};

我收到以下错误:Uncaught TypeError: namespace.surprise is not a function

1 个答案:

答案 0 :(得分:0)

如果在定义函数之前调用,则会得到TypeError。您必须先定义该功能。在定义它之前,命名空间没有surprise函数,一旦你调用它,JavaScript就不知道你在说什么。

不需要首先定义普通函数的原因是:

  

函数语句是魔术并且导致其标识符在其代码块*中的任何内容被执行之前被绑定。

那来自herefunction语句必须使用function关键字定义,而不是存储在如下变量中:

var myFunc = function () {
    ...
}

以上述方式进行治疗。由于名称空间将函数存储到变量中,因此它们在定义之前就失去了被使用的能力。