2

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

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

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

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

4

6 回答 6

1

区别在于浏览器如何将它们加载到执行上下文中。

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

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

于 2012-09-11T10:05:22.497 回答
1

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

于 2012-09-11T10:03:08.950 回答
1

第一段代码 (SetError) 包含Anonymous Function Expression,其中第二段代码 (SetError2) 包含 a Function Declaration。请参阅函数声明与函数表达式

另一篇好文章:命名函数表达式揭秘

摘抄:

函数声明在任何其他表达式之前被解析和评估。即使声明在源中位于最后,它也将首先评估范围中包含的任何其他表达式。

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

于 2012-09-11T10:04:58.543 回答
0

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

于 2012-09-11T10:04:47.847 回答
0

Javascript 有对象和函数。

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

这是一个对象:

var TestClass = {};

您可以向 TestClass 对象添加一个新对象,如下所示:

var TestClass = { object : {}};

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

var a = TestClass.object;

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

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

现在您可以像这样调用测试类的函数:

TestClass.setError();

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

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

你可以这样调用:

setError2();

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

于 2012-09-11T10:13:09.393 回答
-2

这个:

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

相当于这个:

window.SetError2 = function(errorCode) {
  alert("SetError2 ");
}
于 2012-09-11T10:04:56.707 回答