参数在SAEF中意味着什么?

我是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 );
    
我的问题是这个参数和文档的含义是什么?它们都是真正的参数,它将取代匿名函数中包含的窗口和文档的参数?


这是一种称为立即函数的JavaScript模式。 它采取的形式是:

 (function(param1, param2, ...) {
    /* ...  function body  ... */
 }(var1, var2));

你是正确的,它涉及创建一个匿名函数,然后用一组变量来调用它。

它允许开发人员创建一个没有变量泄漏的范围。 JavaScript只有全局和函数范围。 任何在函数体外声明的变量都会自动在Global范围内。

即时功能避免了这个问题。

在这种情况下,就像在很多情况下一样,immediate函数将返回一些包含闭包内部的一些内部变量的东西。 这可以保护它们,但可以保护它们的值。

在这种情况下,您将返回一个允许调用者将事件添加到HTML元素的函数。 您通常会看到用于创建跨浏览器方法的立即函数。 对直接函数的调用将执行所有浏览器方法嗅探,然后生成适当的跨浏览器方法。 这意味着嗅探只能完成一次。 这样每次调用该方法时都可以避免嗅探浏览器。

链接地址: http://www.djcxy.com/p/71135.html

上一篇: What does the param mean in SAEF?

下一篇: Creating dynamic play list