JS基础 -- 立即执行函数

185 阅读2分钟

/*

  • 立即执行函数
  • 函数定义完,立即被调用,这种函数焦作立即执行函数
  • 立即执行函数往往只会执行一次
  • 如果只是下面这样写会报错,因为没有函数名,所以在function()是不被识别的,
  • 它只能识别后面的大括号,把大括号当做一个代码块,那要怎么解决哪??
  • 错误语法:
  • function(){
  • 代码......
  • }
  • 只需要在function()和大括号放到一个小括号里就行,这样写是代表function()
  • 和大括号是一个整体,这样就不会报错了
  • 正确语法:
  • (function(){
  • 代码......
  • });
  • 这样写虽然不报错了。但是,没有做到立即执行函数的效果,如何才能立即执行函数?
  • 没有立即执行是因为没有调用这个匿名函数,想要调用需要在外层小括号后面再加一个小括号,
  • 这样就可以做好立即执行的效果.
  • 立即执行函数语法:
  • (function(){
  • 代码......
  • })();
  • 这样写了整体看起来好像很完整似的,其实,你会想到如果想要传值,那该如何传参数?
  • 接收参数值的位置和代码函数对象的接收参数位置是一样的,是在function()的小括号中设置接收参数值,
  • 那么传值在哪里添加??其实,就在结尾有一个小括号,而这个小括号就是传参数的位置。
  • 带参数的立即执行函数语法:
  • (function(a,b) {
  • 代码......
  • })(123,456);
  • 注意:调用函数不止是需要函数对象,也可以不需要函数对象。因为这种写法的特殊性,
  • 所以在很多框架中也被广泛的使用,其实这种写法整体就是个函数对象。
  • 这种写法的特殊性就在于立即执行,也就是说在没有其他变量的调用下会被触发,其他这个说法不正确,因为
  • 它是默认被window调用了,也可以说是被JavaScript底层调用了(个人理解,如有错请在评论区留言)。
  • 而带有函数名的函数是属于被动调用,就是说带有函数名的函数是等待被其他函数调用或其他变量调用

*/ //第一个错误和第二个,这里就不在写了,自己可以去尝试一下,看看效果。

   //不带参数的立即执行函数
         (function() {
            alert('不带参数的立即执行函数');
         })();
        //带参数的立即执行函数
         (function(a, b) {
            alert('带参数的立即执行函数: a =' + a + '; b =' + b);
         })(123, 456);