当使用$(document).ready时,为什么它必须在匿名函数中
When using $(document).ready why must it be in an anonymous function?
我一直使用文档就绪,但我正在观看一些教程视频以真正了解发生了什么,而不仅仅是通过键入它来了解它。
出于习惯,我一直把它放在一个匿名函数中,因为它总是这样做,但现在我看到它是否不在匿名函数中(例如alert();
(,它不会在加载 DOM 时执行,而是在加载该 javascript 时立即执行。它必须在匿名函数中才能发生这种情况(当整个页面加载时(并且事件侦听器触发其"就绪"。
这是为什么呢?
此外,我经常看到类似函数(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
变量转换为只能在函数上访问的局部变量,这样它就不会与其他全局变量冲突,也不能被其他函数覆盖。
- jQuery函数:为什么第一个事件的完成延迟到第二个事件完成
- JavaScript:回调函数与匿名函数 – 为什么只有一个触发
- 节点.js带方括号的全局变量和函数 - 为什么这样做
- 为什么简单的MVC教程没有调用我的javascript函数?为什么可以't我也调试
- 当你改变原型时,构造函数为什么会改变?(参见代码)
- JS-op.继承和apply()函数.为什么没有'不起作用
- 立即调用的函数表达式运行最后定义的函数.为什么?
- 我必须将$scope基元封装在对象中,但可以在不封装它们的情况下使用函数.为什么?
- 很好的上传程序.cancelAll不是onComplate回调中的函数.为什么?
- javascript匿名函数:为什么我的脚本没有'不起作用
- JavaScript 函数 - 为什么这样做
- 学习Swift - inout函数-为什么要修改全局变量的值
- 剑道网格错误-网格.选择不是函数为什么
- 将window和undefined传递给立即调用的匿名函数.为什么?
- “使用Strict"破坏Javascript函数-为什么?
- JavaScript的keys()函数为什么没有文档
- JavaScript二进制缩减函数:为什么16 + 0返回0
- Javascript错误,无法识别函数.为什么
- 尝试执行FizzBuzz函数.为什么不工作
- 变量重赋值保留了以前的原型函数.为什么