Javascript:“顶级'这个'表达”

时间:2012-11-07 19:07:37

标签: javascript this

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

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

“顶级'此'表达式。此检查报告Javascript'this'表达式在对象文字或构造函数体外发生的实例。这样的表达式是合法的Javascript,并引用顶级”全局“Javascript对象,但基本没用。“ (由InspectionJS提供)

顺便说一句,jQuery与(window)而不是(this)具有相同的效果。

我不明白这意味着什么。我所知道的是,第一个(和第二个)之间的翻转是一个对象,但是这个添加是什么?

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

3 个答案:

答案 0 :(得分:5)

我对你遇到的问题不是100%肯定,但是让我解释一下我从Paul Irish的视频中学到的关于JQuery源代码的经验。

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

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

所以就像执行以下操作

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

现在解释this.通常,我们将整个程序包装在这样一个自动执行的函数中。调用this时,窗口和未定义只是在共享代码空间时修复边缘情况。 例如,某人可能会添加类似

的内容
window = 0;
//or
undefined = 1;

突然间,我们依赖这些非常重要的全局变量。在顶层使用它将窗口变量返回到内部函数。因为我们没有将任何第二个变量传递给函数,所以undefined会回到正确的值。

希望这一切都有所帮助。

答案 1 :(得分:4)

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

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

最好编写window来显式引用全局对象,而不是依赖于this在方法调用中未使用时隐式引用全局对象的事实。

答案 2 :(得分:0)

这会将一大堆代码放入一个具有自己范围的紧急执行函数中。

例如:

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

alert(apple); //undefined