JS里面关于forEach遍历的问题?

var arr = [1,2,3,4,5,6,7,9];
            arr.forEach(function(item, index, arr){
                  /*
                  intem是当前遍历到的元素
                  index是当前遍历到的元素下标
                  arr是数组本身 
                   */
                  document.write(item + "," + index + "," + arr + "<br>");
            })     

我想问下函数的组成不是function +函数名 + ()……吗?
为什么这个里面的函数只有形参,而没有函数名?

函数不一定要有函数名,比如匿名函数。
又比如立即执行函数也没有函数名:
(function(){})()
可以想一想其实有的时候写上函数名是完全没必要的,所以这样的设计也是合理的

forEach是arr的某个方法,现在这个方法需要传递一个函数作为它的入参,这个函数的名字本身已经没什么意义了,因为你只是需要一个函数,所以可以用匿名的函数,es6中的箭头函数()=>你会发现也是个匿名函数,所以现在很多方法需要函数作为入参的时候都会用到箭头函数,例如arr.map(()=>{...}),arr.filter(()=>{...}),

如果你非要有函数名也不是不行
这和你写的是一个意思

function test(item, index, arr){
                  /*
                  intem是当前遍历到的元素
                  index是当前遍历到的元素下标
                  arr是数组本身
                   */
                  document.write(item + "," + index + "," + arr + "<br>");
            }

    var arr = [1,2,3,4,5,6,7,9];
    arr.forEach(test);

但是你会发现不需要函数名为什么多此一举呢?

foEach 遍历肯定是在内部得呀!