我一直在使用准备好的文档,但我正在观看一些教程视频来真正了解发生了什么,而不是仅仅通过输入这么多才知道。
我总是出于习惯将它放在匿名函数中,因为它总是这样做,但现在我看到它是否不在匿名函数中(alert();
例如),它不会在加载 DOM 时执行,而是在加载 javascript 时立即执行负载。它必须在一个匿名函数中才能发生它应该如何(当整个页面加载时)并且事件侦听器触发它的“准备好”。
为什么是这样?
此外,我经常看到类似 function(i){}(i) 的东西,这是什么意思?
我一直在使用准备好的文档,但我正在观看一些教程视频来真正了解发生了什么,而不是仅仅通过输入这么多才知道。
我总是出于习惯将它放在匿名函数中,因为它总是这样做,但现在我看到它是否不在匿名函数中(alert();
例如),它不会在加载 DOM 时执行,而是在加载 javascript 时立即执行负载。它必须在一个匿名函数中才能发生它应该如何(当整个页面加载时)并且事件侦听器触发它的“准备好”。
为什么是这样?
此外,我经常看到类似 function(i){}(i) 的东西,这是什么意思?
在这个答案中,我将使用 的简写$(document).ready(...)
,即$(...)
如果传递了一个函数。
该函数不必是匿名的;你可以这样写,例如:
function doStuff() {
}
$(doStuff);
我想你的意思是如果你试试这个:
$(alert('Yo!'));
它确实会立即发出警报。这是因为函数是预期的,并且alert()
是函数调用。另一方面,这会起作用(尽管很奇怪):
$(alert);
对于第二个问题,什么function(i){}(i)
是声明一个带有一个参数的函数对象,然后立即使用提供的参数运行它。这是一种使用对象的有用方法,不需要它是全局的,也不需要具有特定名称。例如,这个:
(function($) {
// Do stuff with $
})(jQuery);
让您别名jQuery
为$
.
好吧,这就是 JavaScript 的工作方式:
$(document).ready(alert('x'));
将执行alert('x')
并将其返回值传递给$(document).ready()
. 这显然没有任何意义——您希望在 DOM 准备好时执行代码。因此,您将包含该代码的函数$(document).ready()
传递给 - 一旦 DOM 准备好,jQuery 将执行传递给该函数的所有函数。
(function(i){})(i);
是一种在新范围内创建新变量的方法。当您在循环内创建回调并想要循环变量的当前值时,这是必要的。
如果您谈论的是匿名函数,它有时会在问题的第一部分包装 jQuery 代码,即(function($){ /* code here *= })(jQuery);
-$
即使它不指向全局范围内的 jQuery,也可以使用它。它类似于我在上一段中提到的,只是用于不同的目的。
当你这样做
$(alert())
它相当于
var alertresult = alert()
$(alertresult);
在这种情况下,很明显警报会立即运行。如果要传递函数本身,则需要避免调用它:
$(alert)
至于function(i){ dosomething }(somevalue)
东西,它基本上是一个shiort版本
(function(){
var i = somevalue;
dosomething;
}());
也就是说,您可以在 dosomething 位中使用变量“i”。将代码包装在立即调用的函数中的原因是,这会使i
变量成为只能在您的函数上访问的局部变量,这样它就不会与其他全局变量发生冲突,也不会被其他函数覆盖。