js中的立即执行函数的写法,立即执行函数作用是什么?

时间: 2018-05-29阅读: 2232标签: 函数

js立即执行函数是什么?

就是指:声明一个匿名函数,而且该匿名函数会被马上调用。


js使用立即执行函数有什么作用呢?

立即执行函数会创建一个独立作用域, 该作用域的变量外部是无法访问的。立即执行函数主要是为了防止环境污染(也就是说避免变量污染)。在es6中提供了let,使用let声明的变量是块级作用域局部变量。

以一个著名的面试题为例:

var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
  liList[i].onclick = function(){
    alert(i) // 为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5
  }
}

为什么 alert 的总是 6 呢,因为 i 是贯穿整个作用域的,而不是给每个 li 分配了一个 i,那么怎么解决这个问题呢?用立即执行函数给每个 li 创造一个独立作用域即可(当然还有其他办法):

var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
  !function(j){
    liList[j].onclick = function(){
      alert(j) // 0、1、2、3、4、5
    }
  }(i)
}

在立即执行函数执行的时候,i 的值被赋值给 j,此后 j的值一直不变。i 的值从 0 变化到 5,对应 6 个立即执行函数,这 6 个立即执行函数里面的 j 「分别」是 0、1、2、3、4、5


js立即执行函数的写法有哪些?

1、使用()运算符方式一:

(function(val) {
  console.log(val);  //使用()运算符
})('fly63.com');


2、使用()运算符方式二:

(function(val) {
  console.log(val);  //使用()运算符
}('fly63.com'));


3、使用!运算符:  

!function(val) {
  console.log(val);  //使用!运算符
}('fly63.com');


4、使用+运算符:  

+function(val) {
  console.log(val);  //使用+运算符
}('fly63.com');


5、使用+运算符:    

-function(val) {
  console.log(val);  //使用-运算符
}('fly63.com');


6、使用=运算符:     

var fn = function(val) {
  console.log(val);  //使用=运算符
}('fly63.com');

备注:这里的fn其实打印会发现:其值是undefined哦!


7、其它方式

~function(){
    console.log('fly63.com')
}();

void function(){
    console.log('fly63.com')
}();

new function(){
    console.log('fly63.com')
}();

[ function() {
 console.log('fly63.com')
}() ];

delete function() {
  console.log('fly63.com')
}();

typeof function() {
   console.log('fly63.com')
}();


1, function() {
  console.log('fly63.com')
}();

1 ^ function() {
  console.log('fly63.com')
}();

1 > function() {
   console.log('fly63.com')
}();


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/835

关闭

js声明函数

JS声明函数的三种方式:函数表达式: function操作符创建函数, 表达式可以存储在变量或者对象属性里. 往往被称为匿名函数, console.log(h.name); 可以看到打印为空;函数声明: 具名函数, 且函数能在其所在作用域的任意位置被调用

js中reduce()方法

reduce() 方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(上一次回调的返回值),当前元素值,当前索引,原数组。

一个简单的函数消灭业务代码的低级错误

日常的前端开发业务代码中,我们经常都需要调试数据,所以要经常更改某些参数的初始化数据,或者更改过程中的数据。但是很多时候,改了数据调试完之后就忘记改回去了,某个调试的场景是依赖一个参数的修改还好

引用类型作为函数参数何解

在向函数传递引用类型的参数时,相当于把引用类型的地址复制给函数内的一个局部变量,所以局部变量和传入的参数会指向内存中的同一个对象。 局部变量的变化也会映射到传入参数

js中回调函数,promise 以及 async/await 的对比用法 对比

在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的?回调函数:首先要定义这个函数,然后才能利用回调函数来调用!

什么是纯函数_以及为什么要用纯函数?

当我第一次听到 “纯函数 (Pure Function)” 这个术语的时候我很疑惑。常规的函数做错了什么?为什么要变纯? 为什么我需要纯的函数?除非你已经知道什么是纯函数,否则你可能会问同样的疑惑

JS如何重写一个函数?

分享一些自己在开发上遇到的问题,比如我们页面上用了大量的打印语句,但是在某些时候,我们不想要了。我们删除这里的代码,如果太多了,那工作量太大好累,想想都不想干

Js函数拓展

箭头函数的作用域永远是定义时的作用域,因此不受严格模式,call,bind,apply方法的影响。 想改变箭头函数作用域:将箭头函数定义在一个普通函数中。想改变这个普通函数作用域,我们可以改变箭头函数的作用域

js调用函数的几种方法_ES5/ES6的函数调用方式

这篇文章主要介绍ES5中函数的4种调用,在ES5中函数内容的this指向和调用方法有关。以及ES6中函数的调用,使用箭头函数,其中箭头函数的this是和定义时有关和调用无关。

Javascript之尾调用

尾调用是函数式编程的一个重要的概念,本篇文章就来学习下尾调用相关的知识。有说过在一个函数中输出一个函数,则这个函数可以被成为高阶函数。本文的主角尾调用和它类似,如果一个函数返回的是另一个函数的调用结果,那么就被称为尾调用。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!