javascript立即执行函数简单介绍
立即执行函数顾名思义就是声明一个函数,并立即执行它。而且执行完就释放控件,找不到引用
立即执行函数写法
(function (形参){ // 写法1(w3c建议) xxx }(实参)) (function (形参){ // 写法2 xxx })(实参)
但是个人更习惯用第二种写法,所以这看个人习惯了。
注意!! 只有表达式才能被执行符号()执行,且被执行后忽略函数名
function a(){}() //报错,因为这是函数申明 var test = function a(){}() //可以执行,这是函数表达式,注意被执行后test为undefined 类似于立即执行函数
立即执行函数也是有返回值,如下
//正常情况 (function (a, b, c) { var d = a + b + c console.log(d) }(1, 2, 3)) //有返回值情况 var num = (function (a, b, c) { var d = a + b + c return d }(1, 2, 3)) console.log(num) //6
曾经看过这样一道题目,如下
//前面说了,理论上该情况上会报错 function a() { }() //但是如果括号里加参数就不会报错 function a(a, b, c) { console.log(a + b + c) }(1, 2, 3) //不会报错 也不会执行a函数 //因为如果括号加参数,系统会认为这不是执行符号,这是后会当成两句代码 函数声明和(1, 2, 3) function a(a, b, c) { console.log(a + b +c) } (1, 2, 3)
立即执行函数和逗号运算符
var f = ( function f() { return '1' }, function g() { return 2 } )() console.log(typeof f) => number // 逗号运算符会返回最后一个值
var x = 1 if(function f() {}) { // 函数声明被括号后变成表达式,被表达式后忽略函数名, f就不存在了 x += typeof f // 但是只有 typeof f 是不会报错,且为字符串undefined } console.log(x) => 1unfefined
end !!!