博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js立即执行函数
阅读量:4481 次
发布时间:2019-06-08

本文共 1205 字,大约阅读时间需要 4 分钟。

  这两天经理让我出一套js的面试题,我自己都是个刚进入前端的菜鸟,这怎么办啊,赶紧补基础呗。正好这两天项目也做完了,赶紧补充一下基础,临时抱拂脚,不能完全运用,至少也能说出点东西来吧。首先研究的就是js的立即执行函数,以前觉得那叫一个高级啊,有时候用加号有时候用括号,在代码中可以直接执行,仔细看看原来这么简单,这里总结一下吧。

1.语法

  通常我们使用的是两种(function(){})()或者是(function(){}()),但其实包裹function的那层小括号可以用很多运算符来代替,什么+,-,!啦之类的等等运算符,甚至void,new也可以将其转换为函数表达式,然后再加"()"立即执行。

2.为什么一定要使用IIFE(Imdiately Invoked Function Expression)

  a)传统的方法啰嗦,定义和执行分开写

  b)传统的方法直接污染全局命名空间 

  一般来说定义函数有两种方式

//函数声明语句写法function test(){};test();//函数表达式写法var test = function(){};test();

  不难看出,其实在函数后面用()即是调用该函数,那么能不能写function test(){}()呢?答案是不能,因为function test(){}这个部分只是一个声明,对于解释器来说,就好像你写了一个字符串 "function test(){}",它需要使用解析函数,比如eval()来执行它才可以。所以把 () 直接放在声明后面是不会执行,这是错误的语法。变正确的方式很简单,只需要把声明变成 表达式(Expression)就可以了。最常见的办法就是用()括起来,所以才有上述第一点中很多运算符都能立即执行,因为都将声明变成了表达式。

3.参数

  立即执行函数不去污染全局命名空间,是因为 IIFE 创建了一个新的函数作用域。如果你需要全局对象,那就 pass 给 IIFE。

(function (global) {    // 在这里,global就是全局对象了})(this)// 在浏览器里,this就是 window 对象

4.使用时机

  a)当我们需要写一个js文件,并且复用率很高的时候,建议使用。

  b)如果声明的函数只需要调用一次,建议使用。

  c)独立模块,这个和第一点差不多。单独提出来,是想强调一下立即执行函数的好处,开发时,它能做到各模块的低耦合,减少对全局作用域的污染。

 

p.s:其实很多人也叫立即执行函数为匿名函数,其实立即执行函数可以有函数名的哦,不信你自己试试吧。

参考链接:

https://segmentfault.com/q/1010000000442042

转载于:https://www.cnblogs.com/zmc-change/p/6553591.html

你可能感兴趣的文章
Mad Libs
查看>>
Django 请求类型
查看>>
Salesforce Lightning开发学习(三)Component表单初解
查看>>
[Xamarin.Android] 发布NuGet套件
查看>>
Python自动化--语言基础3--字典、函数、全局/局部变量
查看>>
ThreadPoolExecutor源码学习(1)-- 主要思路
查看>>
vimtutor 1.7中文版
查看>>
ZOJ1508 Interval
查看>>
。U盘安装windows7操作系统
查看>>
广播中receiver配置需要注意data的配置
查看>>
Django中Ajax处理
查看>>
程序员的游戏
查看>>
数据结构(一)递归方法---解决斐波那契数列
查看>>
StarUML的9种图
查看>>
猪猪的机器学习(十六)采样和变分
查看>>
dataGridview显示行时多显示一行??如何去除
查看>>
Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
查看>>
第一天关于PS的学习
查看>>
[心跳] 互联网的长在线、心跳和断线重连
查看>>
手机端触屏滚动效果
查看>>