立即执行函数表达式(自执行函数)

立即执行函数表达式

立即执行函数表达式,大部分人也称为自执行函数。

自执行函数的写法

匿名函数

(function(){
        console.log(2)
    })()

具名函数

(function log(){
        console.log(2)
    })()

自执行函数的传参

(function add(a, b){
        console.log(a + b)
    })(1,2)

返回值

let fn =  (function add(a,b){
        return a + b;
    })(2,4);

console.log(fn)

自执行函数也可以传递函数作为参数

var a = 2;

(function log(fn){
        fn(window)
    })(function fn(global){
        var a = 3;
        console.log(a); // 3
        console.log(global.a); // 2
    });

为什么要使用立即执行函数表达式

function add(a, b){
    var c = 2;
    console.log(a + b);
}
add(1,2);

有些时候我们要实现需求,为了实现这些业务逻辑,为了不让变量污染全局环境,定义了函数,但是这些函数,却不是等待调用的,程序一启动,那些函数也跟着执行,但像上面的代码,尽管函数里面的变量是没有污染全局,但add这个函数名变量,却还是污染了全局,有点不美,所以使用立即执行函数表达式就能解决这种情况。

(function add(a, b){
    var c = 2;
    console.log(a + b);
})(1,2)

注意事项

虽说javaScript的分号是可有可无的,但有些时候还是必要的。

console.log(5)

(function add(a, b){
    var c = 2;
    console.log(a + b);
})(1,2)

上面代码会报错,因为javaScript确实是有分号这个规则的,代表着语句的结束。

这种时候加个分号就行了

console.log(5);

(function add(a, b){
    var c = 2;
    console.log(a + b);
})(1,2)

但是很多时候我们已经习惯不加分号了,显得比较麻烦,这种时候就要知道,什么情况下该加分号。

只要语句开头是括号,方括号,正则开头的斜杠,加号,减号的情况下,在前面加分号就行了,当然也可以加别的符号,比如感叹号,不过一般都是加分号

console.log(5)

;(function add(a, b){
    var c = 2;
    console.log(a + b);
})(1,2)

!(function add(a, b){
    console.log(a * b);
})(3,2)

在对象里使用自执行函数

var a = 5
var obj = {
    a: 1,
    b: function(){
        console.log(this.a)// 5
    }(),
    c: 4
}
var a = 5
var obj = {
    a: 1,
    b: +function(){
        console.log(this.a)// 5
    }(),
    c: 4
}

以上两种都可以,但需要注意的是对象里的立即执行表达式改变了原本this的指向,这时的thiswindow

var a = 5
var obj = {
    a: 1,
    b: function(){
        console.log(this.a)// 1
    },
    c: 4
}
obj.b()

这种时候,this是指向obj

原文地址:https://www.cnblogs.com/tourey-fatty/p/12114649.html

时间: 2024-08-27 20:31:45

立即执行函数表达式(自执行函数)的相关文章

JavaScript 函数声明,函数表达式,匿名函数的区别,深入理解立即执行函数(function(){…})()

function fnName(){xxxx}; // 函数声明:使用function关键字声明一个函数,在指定一个函数名. //例如:(正常,因为 提升 了函数声明,函数调用可以在函数声明之前) fnName(); function fnName(){ alert('Hello World'); } var fnName = function(){xxxx}; //函数表达式:使用function关键字声明一个函数,但是未给函数命名,最后将匿名函数赋予给一个变量. //例如1:(报错,变量fn

函数声明、函数表达式、匿名函数

函数声明.函数表达式.匿名函数 ()先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明 函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式. 匿名函数:function ()

JavaScript 函数声明与函数表达式的区别 函数声明提升(function declaration hoisting)

解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问).至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真的被解释执行.例子: alert (sum(10,10)); function sum (num1, num2) { return num1 + num2; } 以上代码完全可以正常运行.因为在代码开始执行之前,解析器就已经通过一一个名为函数声明提升(function declaration hoist

javascript立即执行函数表达式(IIFE)

常用的两种写法: (function(){ /* code */ }()); (推荐写法) (function(){ /* code */ })(); Q:为什么这样写,函数就嗯那个立即执行? A:因为在javascript里,括号内部不能包含语句,当解析器对代码进行解释的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明. eg:如下代码就会报错. function(){ /* code */ }(); // SyntaxError: Un

创建自执行函数表达式

首先贴一段这样的代码 //正确的代码var foo=function(){ //函数内容 }; foo(); 对于这段代码大家都很熟悉,创建一个函数表达式并且立即执行.接下来,我们试着去把这段代码简化,变成一个立即执行函数表达式. //错误的代码function(){ //函数内容 }() 这段代码与上面代码的区别就是把foo省略了,直接替换成function,但是很明显这样做是不行的,js会给我们报出一个错误. 为什么这样会报错呢?其实原因很简单,函数声明以function关键字开始,同时函数

笔记:IIFE 立即执行的函数表达式 +function ($) { }(window.jQuery);

在Bootstrap源码(具体请看<Bootstrap源码解析1>)和其他jQuery插件经常看到如下的写法: +function ($) { }(window.jQuery); 这种写法称为:IIFE 2(Imdiately InvokedFunction Expression 立即执行的函数表达式). 解析: 先弄清函数表达式(function expression)3和 函数声明(function declaration)的区别: 函数表达式  var test = function()

函数声明与函数表达式

1.什么是函数声明,函数表达式 函数声明:function 函数名(){} 函数表达式:function 函数名(){}.函数名可写可不写.写出来的,就是命名函数表达式,不写的就是匿名函数表达式 例子: function aaa(){};这就是函数声明 var a=function aaa(){};命名函数表达式 var a=function(){};匿名函数表达式 下面的都是函数表达式 (function aaa(){}) ~function aaa(){} -function aaa(){}

JavaScript中的函数表达式

在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表现形式,函数表达式(Function Expression, FE)有下面四个特点: 在代码中须出现在表达式的位置 有可选的函数名称 不会影响变量对象(VO) 在代码执行阶段创建 下面就通过一些例子来看看函数表达式的这四个特点. FE特点分析 例子一:在下面代码中,"add"是一个函数对象

javascript高级程序设计笔记(第7章 函数表达式)

7.5 小结 在JavaScript 编程中,函数表达式是一种非常有用的技术.使用函数表达式可以无须对函数命名,从而实现动态编程.匿名函数,也称为拉姆达函数,是一种使用JavaScript 函数的强大方式.以下总结了函数表达式的特点.? 函数表达式不同于函数声明.函数声明要求有名字,但函数表达式不需要.没有名字的函数表达式也叫做匿名函数.? 在无法确定如何引用函数的情况下,递归函数就会变得比较复杂:? 递归函数应该始终使用arguments.callee 来递归地调用自身,不要使用函数名——函数