js自执行函数表达式

// 下面2个括弧()都会立即执行

(function () { /* code */ } ()); // 推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的

和普通function执行的时候传参数一样,自执行的函数表达式也可以这么传参,因为闭包直接可以引用传入的这些参数,利用这些被lock住的传入参数,自执行函数表达式可以有效地保存状态。
// 这个代码是错误的,因为变量i从来就没背locked住// 相反,当循环执行以后,我们在点击的时候i才获得数值// 因为这个时候i操真正获得值// 所以说无论点击那个连接,最终显示的都是I am link #10(如果有10个a元素的话)

var elems = document.getElementsByTagName(‘a‘);

for (var i = 0; i < elems.length; i++) {

    elems[i].addEventListener(‘click‘, function (e) {        e.preventDefault();        alert(‘I am link #‘ + i);    }, ‘false‘);

}

// 这个是可以用的,因为他在自执行函数表达式闭包内部// i的值作为locked的索引存在,在循环执行结束以后,尽管最后i的值变成了a元素总数(例如10)// 但闭包内部的lockedInIndex值是没有改变,因为他已经执行完毕了// 所以当点击连接的时候,结果是正确的

var elems = document.getElementsByTagName(‘a‘);

for (var i = 0; i < elems.length; i++) {

    (function (lockedInIndex) {

        elems[i].addEventListener(‘click‘, function (e) {            e.preventDefault();            alert(‘I am link #‘ + lockedInIndex);        }, ‘false‘);

    })(i);

}

// 你也可以像下面这样应用,在处理函数那里使用自执行函数表达式// 而不是在addEventListener外部// 但是相对来说,上面的代码更具可读性

var elems = document.getElementsByTagName(‘a‘);

for (var i = 0; i < elems.length; i++) {

    elems[i].addEventListener(‘click‘, (function (lockedInIndex) {        return function (e) {            e.preventDefault();            alert(‘I am link #‘ + lockedInIndex);        };    })(i), ‘false‘);

}
时间: 2024-10-14 00:44:20

js自执行函数表达式的相关文章

创建自执行函数表达式

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

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

我们经常会看到这样的写法: ;(fuction () { // do something })() 这就是一个简单的IIFE(立即执行函数表达式,immediately-invoked function expression)了. 这样的写法有什么好处呢?来简单分析一下. 1. 开头的分号 我们都知道,js是可以加分号或者不加分号的,在某些情况下,不加分号会让解析器解析出错,举个例子: var a = 0 , b = 0 ; a = b + 3 (b = a) // Uncaught TypeE

js立即执行函数用法

js立即执行函数可以让你的函数在创建后立即执行,js立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行. 一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号 (function(){alert(1);})(); 方式3.function前面加运算符,常见的是!与void !function(){alert(1);}(); void

js自执行函数

5.1对于函数表达式,在后面加括号即可以让函数立即执行:例如下面这个函数,至于为什么加了括号就可以立即执行,我们可以这么理解,就是像fn1():这样写的话,函数 可以立即执行是没问题的,我们在经常会用到,那么对于函数表达式来说,fn1就是对后面的匿名函数的一个引用,因此在后面的匿名函数后直接加括号,自然也就可以立即执行 函数表达式立即执行 5.2但是对于下面这个函数,如果直接加()就会报错:如果按照上面的思路去理解,在匿名函数后面直接加上()应该是可以立即执行的,但是下面这个函数之所以会报错,而

js立即执行函数的使用

一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号 (function(){alert(1);})(); 方式3.function前面加运算符,常见的是!与void !function(){alert(1);}();  void function(){alert(2);}(); 二.立即执行函数的参数 可以给立即执行函数传递参数,例如 (function(who, when){     console.lo

js 立即执行函数

1.我们首先要搞明白:函数表达式和函数声明的区别. 函数表达式:既可以为匿名函数也可以有函数名,但是调用的时候都是通过函数左边的变量func来调用 var func = function(){ alert('xxx'); }; var b = new func(); 函数声明:必须有函数名 function func(){ alert('xxx'); } func(); 所以立即执行调用的函数表达式有一下几种 !function () { /* code */ } ();~function ()

js立即执行函数应用--事件绑定

js中立即执行函数的应用:应用到事件绑定上. 少说多做,直接运行代码(代码中有注释): 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta http-equiv="X-UA-Compatible" content="ie=edge" /> 6 <titl

js如何执行函数

前言 js如何执行函数,指的是声明一个函数之后,在代码里如何去执行它. 函数调用模式 步骤如下, 1.先声明一个函数: 2.然后,调用该函数即可. 方法调用模式 步骤如下, 1.先声明一个函数,只不过这个时候是作为对象的一个方法: 2.然后,调用对象的该方法即可. 总结 不管是哪种执行方式,根本都是先声明一个函数,然后再调用它即可--只不过声明函数的方式有所区别而已. 参考 JS执行函数 JS执行函数: 1:方法调用模式. 请注意this此时指向myobject. /*方法调用模式*/ var

JS 自执行函数

由于自己js基础知识薄弱,很多js的知识还没有掌握,所以接下来会经常写一些关于js基础知识的博客,也算给自己提个醒吧. js自执行函数,听到这个名字,首先会联想到函数.接下来,我来定义一个函数: function aaa(a,b){ return sum = a + b } 定义了一个名为aaa的函数,在里面可以计算两个数的和.如果想执行它,就必须得调用它,并且还得给它传参: var aa = aaa(1,2) 这样就实现了一个函数的定义与调用,通过console.log我们可以看到sum实现了