把函数变成函数表达式一共有三种写法:
第一种:
(function test(){})();
第二种:
var test = function(){}();
第三种:
(function(){}()); //W3C官方推荐写法
在实际开发中,第一种最常见,第一种更直观。
但需要注意以下两种写法:
- function(){}(); //这种写法会报错
- function(){}(2); //这种写法没问题
两种写法的主要区别是在第二种情况中,因为带了参数,所以JS引擎会把函数那部分当作表达式来处理(也就是默认会加上一个括号()给它,所以不会报错,一般在开发中,只要加了括号,语句就会变成表达式) 。
接着看一道题目:
function test() {
if(function b(){}){
return 10+typeof(b);
}
}
console.log(test());
该题目最终会在控制台输出字符串“10undefined”。
在处理时,会把(function b(){})看作一个整体,而此时都还不涉及预编译的过程,所以b并没有被声明,所以typeof(b)返回的是字符串“undefined”,因此,最终输出的结果是“10undefined”。
关于函数表达式,日常应用最多的就是立即执行函数。