当我有这样的对象时,我收到以下警告/提示/错误:
(
function global(){...};
function moreFunctions(){...};
)(this);
“顶级'此'表达式。此检查报告Javascript'this'表达式在对象文字或构造函数体外发生的实例。这样的表达式是合法的Javascript,并引用顶级”全局“Javascript对象,但基本没用。“ (由InspectionJS提供)
顺便说一句,jQuery与(window)
而不是(this)
具有相同的效果。
我不明白这意味着什么。我所知道的是,第一个(
和第二个)
之间的翻转是一个对象,但是这个添加是什么?
我已经进入了这个,因为我刚刚发现了一个JS库 source ,当它包含在我现有的脚本中时,一切都停止工作。当我删除(this);
部分时,它没有使页面崩溃;但图书馆没有用。
答案 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