我是javascript的新手。我曾经阅读过SAEF的文章,我还有疑问,代码如下:
var addEvent = (function( window, document ) { if ( document.addEventListener ) { return function ( elem, type, callback ) { //if elem exist and is a single node. if ( elem && !elem.length || elem === window ) { elem.addEventListener( type, callback, false ); } else if ( elem && elem.length ) { //elem is an node of array for ( var i = 0; i < elem.length; i++ ) { addEvent( elem[i], type, callback ); } } } } else if ( document.attachEvent ) { return function ( elem, type, callback ) { //if elem exist and is a single node if ( elem && !elem.length || elem === window ) { elem.attachEvent( 'on'+type, function () { callback.call( elem, window.event ); } ); } else if ( elem && elem.length ){ for ( var i = 0; i < elem.length; i++ ) { addEvent( elem[i], type, callback ); } } } } })( this, document );我的问题是这个和文档的参数是什么意思?它们都是真正的参数,它将取代匿名函数中包含的窗口和文档的参数吗?
答案 0 :(得分:0)
这是一种称为即时功能的JavaScript模式。它采取以下形式:
(function(param1, param2, ...) {
/* ... function body ... */
}(var1, var2));
你是对的,它涉及创建一个匿名函数,然后用一组变量调用它。
它允许开发人员创建一个没有变量泄漏的范围。 JavaScript只有Global和Function范围。在函数体外声明的任何变量都自动在全局范围内。
立即功能避免了这个问题。
在这种情况下,在很多情况下,立即函数将返回包含闭包内部某些内部变量的内容。这可以保护他们,但是以受保护的方式提供他们的价值。
在这种情况下,您将返回一个允许调用者将事件添加到HTML元素的函数。您通常会看到用于创建跨浏览器方法的直接函数。对immediate函数的调用将执行所有浏览器方法嗅探,然后生成适当的跨浏览器方法。这意味着嗅探只进行一次和一次。这样可以避免每次调用方法时嗅探浏览器。