w3ctech

关于js函数传入变量的问题

前辈们好,本人是一名js新手,在阅读《javascript高级程序设计》讲到闭包的时候书上写了这样一段代码

function createFunctions(){ var result = new Array();

            for (var i=0; i < 10; i++){
                result[i] = function(num){
                    return function(){
                        return num;
                    };
                }(i);
            }

            return result;
        }

这里倒数第四行大括号结尾后面的(i)书上说是传入变量i,但是因为之前从没见过这种语法所以不是很理解,哪位大神能具体解释一下这种传入变量的方法吗,感激不尽!

w3ctech微信

扫码关注w3ctech微信公众号

共收到10条回复

  • 你的代码修改一下。。。在代码前后加 ```

    回复此楼
  • 你可以试一下如果把外面的一层function去掉会得到什么结果,然后再思考一下,我相信就可以明白了

    回复此楼
  • 将匿名函数赋值给变量的函数是函数表达式。 函数表达式可以在后面直接加括号(有参数可以传参数)来自执行。它等价于

    (function(args){ //body... })(args);

    回复此楼
  • 如果还为明白,可以看看我的一篇博文,可能对你有帮助。http://codepen.io/solar/blog/js-css-details

    回复此楼
  • 谢谢!书上有讲到,去掉外层function的话返回值全部都是10,我能够理解这段函数用法是将每次循环过后i的值复制给num,只是不太明白function(){}();这种传值的方法

    回复此楼
  • 0.0为什么我点击“回复此楼”没有效果。。。

    回复此楼
  • 多谢三楼大神!已经去看了!

    回复此楼
  • 回1楼:明白!

    回复此楼
  • 纠正下我的错误。

    以下比我之前说的可靠性更高。

    1. 函数有函数声明和函数表达式,js编译器区别这两种的方式是:以function关键字开头的是函数声明,其余为函数表达式。(你的代码中result[i] = function (num) {...} 的那个函数是函数表达式)。
    2. 函数表达式是可以直接在后面加(args)来立刻执行(此时的i是处于循环中的变量)的。
    回复此楼
  • @solar.pom 受益匪浅啊

    回复此楼