🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
<mark>语法一:函数声明</mark> ```js // 声明 function funName() { //code } // 调用 funName(); // 对于不需要传参的函数,也可以funName调用 ``` <mark>语法2:函数表达式</mark> ```js // 声明 var fn = function() { //code } // 调用 fn(); ``` **函数声明与函数表达式的区别** * 函数声明必须有名字 * 函数声明会将函数提升,在预解析阶段就已创建,声明前后都可以调用 * 函数表达式类似于变量赋值 * 函数表达式可以没有名字,例如匿名函数 * 函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用 <mark>语法3:自调用函数(匿名函数)</mark> ```js (function(window, undefined) { //code })(window, undefined); // 上面的两个参数:window参数可以根据需要换成其他参数, // 但总是在最后保留undefined是为了防止undefined被重写,因为在低版本的浏览器中 // undefined是可以被重写的 ``` 我们可以将一个函数定义在自调用函数内部,来创建一个私有函数, ```js (function() { function myFun() { //code } // 如果想要暴露myFun函数给外部进行调用,可以使用window对象 window.myFun = myFun; }()) ``` 使用自调用函数需要注意如下问题: ```js 问题1: // 如果存在多个自调用函数要用分号分割,否则语法错误 // 下面代码会报错 (function () { }()) (function () { }()) // 所以代码规范中会建议在自调用函数之前加上分号 // 下面代码没有问题 ;(function () { }()) ;(function () { }()) 问题2: // 当自调用函数 前面有函数声明时,会把自调用函数作为参数 // 所以建议自调用函数前,加上; var a = function () { alert('11'); } (function () { alert('22'); }()) ```