5

当我有这样的对象时,我收到以下警告/提示/错误:

(
    function global(){...};
    function moreFunctions(){...};
)(this);

“顶级 'this' 表达式。此检查报告在对象字面量或构造函数体之外发生的 Javascript 'this' 表达式的实例。这样的 this 表达式是合法的 Javascript,并引用顶级“全局”Javascript 对象,但主要是无用。” (由检查JS)

顺便说一句,jQuery 有相同的 with(window)而不是(this).

我不明白这是什么意思。我所知道的是第一个(和第二个之间的一切)都是一个对象,但是那个添加是什么?

我进入这个是因为我刚刚发现了一个 JS 库,当它包含在我现有的脚本中时,一切都停止了工作。当我删除该(this);部分时,它并没有使页面崩溃;但图书馆只是没有工作。

4

3 回答 3

7

我不能 100% 确定您遇到的问题,但让我解释一下我从 Paul Irish 的 JQuery 源课程视频中学到了什么。

(function(window, undefined) {
})(this);

这被称为自执行功能。函数定义放在括号中。(几乎所有时间都可以将任何东西放在 Javascript 中的括号中)。然后,第二个()立即调用该函数。

所以就像做以下事情

function my_func(window, undefined){...}
my_func(this);

现在来解释一下this.通常,我们将整个程序包装在这样一个自执行函数中。while 调用,thiswindow 和 undefined 几乎只是在共享代码空间时修复了边缘情况。例如,有人可以把类似的东西

window = 0;
//or
undefined = 1;

突然间,我们所依赖的这些非常重要的全局变量中断了。在顶层使用 this 将 window 变量返回给内部函数。而且由于我们没有将任何第二个变量传递给函数,因此 undefined 将返回其正确值。

希望这一切都有帮助。

于 2012-11-07T19:16:14.097 回答
5

它抱怨您在this任何功能之外使用。

在函数内部,使用this(通常)意味着程序员打算将函数作为方法(this调用该方法的对象在哪里),但在函数外部,这只是一件奇怪的事情。

最好window改为显式地引用全局对象,而不是依赖于this在方法调用中未使用全局对象时隐式引用全局对象这一事实。

于 2012-11-07T19:12:03.293 回答
1

这会将整个代码块放入具有自己作用域的立即执行函数中。

例如:

(function(w){
    var apple = 'apple';
})(window);

alert(apple); //undefined
于 2012-11-07T19:09:31.580 回答