Javascript语句中的误解

时间:2012-09-11 10:00:48

标签: javascript function function-pointers

我刚刚开始使用javascript,我看到了一些我无法解释的内容 我有名为TestClass.js的js文件及其以下内容:

TestClass.SetError = function (errorDescription, errorCode, typedErrorCode)
{
    alert("SetError ");
}  

function SetError2(errorCode)
{
    alert("SetError2 ");
}  

有人可以解释一下SetError和SetError2之间的区别吗?

6 个答案:

答案 0 :(得分:1)

SetError是对象TestClass的一种方法。而SetError2是一个全局函数。

答案 1 :(得分:1)

第一段代码(SetError)包含Anonymous Function Expression,其中第二段代码(SetError2)包含Function Declaration。见Function Declarations vs. Function Expressions

另一篇好文章:Named function expressions demystified

摘录:

  

函数声明在任何其他声明之前被解析和评估   表达是。即使声明位于源的最后,   它将被评估最重要的任何其他表达式   范围。

这基本上是主要区别。这不是很大,但值得注意。

答案 2 :(得分:1)

不同之处在于浏览器如何将它们加载到执行上下文中。

在执行任何代码之前加载函数。

while表达式仅在解释器到达该行代码时加载。

答案 3 :(得分:0)

SetError2是一种“命名”方法。 TestClass.SetError是引用匿名方法的TestClass成员变量。 这意味着您可以稍后执行TestClass.SetError = function(){ alert ("SetError2");}

答案 4 :(得分:0)

Javascript具有对象和功能。

对象可以包含对象和/或函数。

这是一个对象:

var TestClass = {};

您可以将新对象添加到TestClass对象,如下所示:

var TestClass = { object : {}};

然后您可以像这样访问它:

var a = TestClass.object;

您可以在对象中拥有一个函数:

var TestClass = {object:{}, setError:function(){/*function body*/}};

现在您可以像这样调用测试类的功能:

TestClass.setError();

此外,函数本身可以这样定义:

function setError2(){/*function body*/}

你可以像这样调用:

setError2();

通常,我们在对象中定义函数以某种方式在Javascript中实现OO并防止混乱的js代码。

答案 5 :(得分:-1)

此:

function SetError2(errorCode) {
  alert("SetError2 ");
}

等同于:

window.SetError2 = function(errorCode) {
  alert("SetError2 ");
}