for循环中的自调用函数

时间:2011-09-23 19:45:18

标签: javascript for-loop self-invoking-function

以下是https://github.com/Khan/khan-exercises/blob/master/khan-exercise.js

的代码
for ( var i = 0; i < loading; i++ ) (function( mod ) {
    if ( !testMode && mod.src.indexOf("/khan-exercises/") === 0 && mod.src.indexOf("/MathJax/") === -1 ) {
        // Don't bother loading khan-exercises content in production
        // mode, this content is already packaged up and available
        // (*unless* it's MathJax, which is silly still needs to be loaded)
        loaded++;
        return;
    }

    // Adapted from jQuery getScript (ajax/script.js)
    var script = document.createElement("script");
    script.async = "async";

    for ( var prop in mod ) {
        script[ prop ] = mod[ prop ];
    }

    script.onerror = function() {
        // No error in IE, but this is mostly for debugging during development so it's probably okay
        // http://stackoverflow.com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer
        Khan.error( "Error loading script " + script.src );
    };

    script.onload = script.onreadystatechange = function() {
        if ( !script.readyState || ( /loaded|complete/ ).test( script.readyState ) ) {
            // Handle memory leak in IE
            script.onload = script.onreadystatechange = null;

            // Remove the script
            if ( script.parentNode ) {
                script.parentNode.removeChild( script );
            }

            // Dereference the script
            script = undefined;

            runCallback();
        }
    };

    head.appendChild(script);
})( urls[i] );

奇怪的是:对于循环代码块而不是通常我们看到自调用函数!(在其他自调用函数内)为什么会这样?这个函数将如何运行?

2 个答案:

答案 0 :(得分:3)

基本上for loop每次都会运行函数,并将值url[i]传递到mod参数。

for ( var i = 0; i < loading; i++ ) (function( mod ) {...The code...})(urls[i]);

如果你在代码中注意到,你会看到这个

(function( mod ) {...The code...})(urls[i])

这是一个将urls[i]传递给参数mod

的函数调用

答案 1 :(得分:1)

这是一个奇怪的构造,但基本上如果你从for循环中排除{},它将只为每次迭代运行下一行,它类似于用{{1}排除{}如果你想要一行if

所以它基本上等同于:

if

哪些东西是那么大的功能。

相关问题