js立即执行函数

立即执行函数在js中是作为一个单独的语句存在的,是一个独立的表达式,()括号能够求得一个数值,使得函数执行。

表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。

先看一个最简单的形式:

(function(){})();

我们了解了表达式就能很清楚的看明白这是什么结构了

(函数定义表达式)函数调用表达式

也就是说先创建了一个匿名函数,然后不传入参数调用它,这就变成了立即执行函数,知道了这些看个传入参数调用的立即执行函数题目

  • 看一个列子。
    1
    2
    3
    (function f(f){
    return typeof f();
    })(function(){return 1;});// "number"

这个题目事实上还涉及了一些其它的知识,立即执行函数不再是以空括号()来调用了,同时传入了一个function作为参数传入调用。

再一个疑惑就是typeof f() 中的f究竟指谁,简单说一下,当函数执行有命名冲突的时候,函数依次填入 变量=>函数=>参数,所以最后被填入的参数f会覆盖函数定义f,typeof f()是对参数的调用,参数是立即执行函数传入的function参数,返回数字1,typeof 1是 “number”。

  • 另外()括号将整个函数和调用包含起来也可以

    1
    2
    3
    (function f(f){
    return f;
    }(3));// "number"
  • 或者常常将函数名省去

    1
    2
    3
    (function(f){
    return f;
    })(3);// "number"

此处未涉及到作用域,立即执行函数本质上是一个表达式,所以它会执行,执行后就被释放了,语句在()括号内有效

文章目录
,