关闭

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

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

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中reduce()方法

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

JS函数提升和变量提升

函数声明(function declaration),通过function 关键字,functionName函数名,arg参数(可选)定义的函数。函数表达式: 将函数声明赋值给一个变量,这个表达式叫做函数表达式

自定义编写js格式化数字的函数

处理网页时,有时需要显示长数字,但是当数字长度很长时,很难看出数字有多大。在这种情况下,当一些网站正在处理数字时,当数字的长度大于三时,它们用逗号分隔,这是一种常见的方式

如何实现 lodash.get 函数及可选链操作简化取值

lodash 基本上成为了 js 项目的标配工具函数,广泛应用在各种服务端以及前端应用中,但是它的包体积略大了一些。对于服务端来说,包的体积并不是十分的重要,或者换句话说,不像前端那样对包的体积特别敏感,一分一毫都会影响页面打开的性能,从而影响用户体验。

让我们来创建一个JavaScript Wait函数

Async/await以及它底层promises的应用正在猛烈地冲击着JS的世界。在大多数客户端和JS服务端平台的支持下,回调编程已经成为过去的事情。当然,基于回调的编程很丑陋的。

Js call()理解

call()方法使用一个指定的this值和单独给出的一个或多个参数来调用一个函数,该方法的语法和作用与apply()方法类似,只有一个区别,就是call()方法接受的是一个参数列表,而apply()方法接受的是一个包含多个参数的数组。

js函数式编程

js函数式编程:是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。

JavaScript 中定义函数的不同方法

你知道在 JavaScript 中创建一个函数有多少种方式吗?声明函数,表达式函数,箭头函数,生成器函数,异步函数,构造函数(AVOID)

js函数、作用域、声明提前、arguments对象

函数的定义:用来执行某些特定功能的代码,为了减少重复使用代码,需要的时候直接调用。函数名:根据功能来自己定义的名称;参数:传入函数内的变量;这里的参数是形参(形式参数),可以给形参赋值

点击更多...

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