function (data){
console.log(data);
}(000)
这个JS片段是错误的,为什么错误呢?
1 显然前面部分有个function关键字,且没有函数名称,那么这个肯定就不是一个函数声明了。
2 没有函数名称的函数就是一个表达式?错! 这个只能说是一个匿名函数。
3 由于匿名函数是执行时才创建的,那么匿名函数的出现肯定需要作为一个表达式出现的。
4 如何将一个匿名函数变为一个函数表达式呢?等等,后面的(000)是什么情况,其实这个表达式的存在是不影响前面的分析的,因为js是遇到错误就会停下来的,所以,前面的问题没有搞定,后面的无论对错都不会执行了,所以也就不用管了。因为目前
function (data){
console.log(data);
}
这个是有语法错误的。
5 将函数转换为一个表达式?
1) 等号 = 比如 window.onload = function (){} ; 右侧的函数就是一个标准的匿名函数了,一个赋值操作符=就将匿名函数变为右值表达式,这个也最常见的用法
2) 加号,减号 (+,-) +/- function(data){}
3)逗号 1,function(){} 由于逗号有一个作用就是隔开表达式的,这里就可以这样用了
4) 括号 (function(){})
由于匿名函数是没有名称,或者说函数表达式其实是没有函数名称的,那么 2,3,4虽然不报错,那么就是一个表达式,基本没有什么用,说白了就是创建了一下这个匿名函数,还没有执行!!(不知道JS会不会对这种进行优化,即不创建,毕竟创建了也没有什么用)
6 使用5中的2,3,4几种方式,有了一个表达式了,表达式代表有结果,函数表达式的结果当然是函数了,或者是函数指针了,那么就可以直接调用函数了,调用函数就是func(parameters)
7 如果单纯为了消除语法错误,就直接为函数加一个名称即可,因为函数声明后面可以跟一个表达式的,即
function foo(){}(000);
这个只是一个函数声明,可以正常调用