下面是书上一段将字符串每个单词的首字母转换为大写的代码. 
其中对于匿名函数的使用不大明白.. 
请问匿名函数function(word)和function(letter)其中的两个局部变量word和letter的值是怎么传进去的? 
有没有高手可以帮忙分析一下 str.replace后面这一段代码的执行过程.
分不会少给
function initToUpperCase(str, global) {
        var re;
        if(!global) re = /\S+/;
        else re = /S+/g;
        
        return str.replace(re, function(word) {        //参数word的值怎么来的? 
            return word.replace(/\S/, function(letter) {    //参数letter的值怎么来的?
                //匹配首字母
                return letter.toUpperCase();
            });
        });
    } 

解决方案 »

  1.   

    这个好像在javascript中叫闭包的概念,从这个函数中是不能看出word和letter的值是怎么传进来的,因为这个闭包是在调用的时候与普通函数不一样,你能把调用部分贴出来吗?另外你可以参考这个文章看看:
    https://developer.mozilla.org/Cn/A_re-introduction_to_JavaScript
      

  2.   


    调用很简单.在HTML语言里加一句alert(initToUpperCase("test abc"))就可以了
    你的那个网站的闭包我看不明白..
      

  3.   

    你的这个例子是用了闭包,但是你的问题与这没有关系,不过我也基本掌握了什么是闭包的概念。
    你的问题:
    return str.replace(re, function(word) {        //参数word的值怎么来的? 
    其中word是通过/\S+/对str进行匹配出来的。你可以在这个嵌套的函数中增加alert语句看看效果。
    return word.replace(/\S/, function(letter) {    //参数letter的值怎么来的?
    其中letter是通过/\S/对word进行匹配出来的。另外你的这个程序好像有一点问题,else re = /S+/g;是否应当为else re = /\S+/g;