Javascript:“顶级“ this”表达式”

Nad*_* S. 4 javascript this

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

(
    function global(){...};
    function moreFunctions(){...};
)(this);
Run Code Online (Sandbox Code Playgroud)

“顶层'this'表达式。此检查报告Javascript'this'表达式的实例出现在对象文字或构造函数主体之外。此类表达式是合法的Javascript,并且引用了顶级的“全局” Javascript对象,但在很大程度上无用。” (由InspectionJS提供)

顺便说一下,jQuery具有(window)代替的功能(this)

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

之所以要这样做,是因为我刚刚发现了一个JS库源代码,并且以某种方式将其包含在现有脚本中后,一切都将停止工作。当我删除该(this);部分时,它没有使页面崩溃;但是图书馆根本没用。

rua*_*akh 5

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

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

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


Nam*_*oel 5

对于您遇到的问题,我不是100%肯定的,但是让我解释一下我从Paul Irish的视频中学到的关于JQuery来源的知识。

(function(window, undefined) {
})(this);
Run Code Online (Sandbox Code Playgroud)

这称为自执行功能。函数定义放在方括号中。(几乎所有内容都可以放在Java中的括号中)。然后,第二个()立即调用该函数。

所以就像执行以下操作

function my_func(window, undefined){...}
my_func(this);
Run Code Online (Sandbox Code Playgroud)

现在解释一下this.通常情况,我们将整个程序包装在一个自执行函数中。在this同时呼吁,窗口和不确定的是非常简单,只是对边缘的情况下修复共享代码空间时。例如,某人可以放类似

window = 0;
//or
undefined = 1;
Run Code Online (Sandbox Code Playgroud)

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

希望所有这些都对您有所帮助。