-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Day11 - 谈谈闭包与即时函数的应用 #55
Comments
闭包:内部函数访问到外部函数的作用域 过程:
优点:
缺点:
应用:
eg:给dom元素绑定点击事件 var liDoms = document.querySelectorAll('.article-tab li');
for (var i = 0; i <= liDoms.length; i++) {
(function () {
//让变量临时存储
var p = i
liDoms[i].onclick = function () {
alert(p);
}
})();
} 即时函数:又称“立即执行函数”IIFF ;((win)=>{
win.jQuery = win.$ = jQuery;
})(window) 优点:
缺点:
应用
eg:惰性函数的应用 const ajax = (()=>{
var xhr = null;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr;//关键代码,后期都不需要环境判断支持了,惰性函数,只执行一次
})() |
即时执行函数,是一种特殊的JS语法,可以使函数在创建时候立即运行 如下写法 ;(function () {
alert('watch out!');
}()); 这个函数会立即弹出一个alert 很明显,即时函数也是一个明显的闭包构成。 常见业务场景有:项目初始化、程序模块化(避免全局变量污染等)、事件绑定... |
|
即时函数也叫立即执行函数,是定义之后立刻执行的函数,执行完之后,函数内部的变量也随着函数一起销毁 如果要定义变量,又不希望变量污染全局,可以在立即执行函数中定义变量,然后通过闭包的形式将变量保存下来 立即执行函数 + 闭包的模式 通常用于 程序的模块化设计,解决全局命名冲突的问题 |
即时函数即时函数是一种语法模式,它会使函数在定义后立即执行。 这种模式由以下几个部分组成:
即时函数可以帮助我们做一些不想留下全局变量的工作。因为即时函数只能执行一次,执行完了立马消失,所以不会重复创建闭包,也不会对当前作用域造成任何污染。 |
即时函数即时函数是定义了立即调用的匿名函数,也称立即执行函数,可以用它来开辟一个独立的作用域。当即时函数中定义的变量被内部函数使用时,就会形成闭包,如下所示: (function() {
var num = 0;
button.click = function() {
console.log(num++)
}
})() 这个就形成了闭包。我们通常用立即执行函数来创建闭包,因为立即执行函数只能执行一次,执行完就立马消失了,不会重复创建闭包,同时也不会对当前作用域造成任何的污染。 |
即时函数会在定义后立即执行。 即使函数与闭包的配合
|
IIFE创建后立即执行的函数,好处是函数内是独立的一个模块,不会和全局作用作用域冲突 |
|
什么时候需要用到立即执行函数呢? 1.当我们需要写一个js文件,并且复用率很高的时候,建议使用。 2.如果声明的函数只需要调用一次,建议使用。 3.独立模块,这个和第一点差不多。单独提出来,是想强调一下立即执行函数的好处,开发时,它能做到各模块的低耦合,减少对全局作用域的污染。 相同点:他们都是函数的一种特殊形态,并且可以共存。而且闭包配合即时函数“口味更佳”。 |
经典应用for(var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i)
}, 1000)
}
for(var i = 0; i < 5; i++) {
(function(j){
setTimeout(function() {
console.log(j)
}, 1000)
})(i)
} |
什么是即时函数 |
即时函数是一种特殊的JavaScript语法,可以使函数在定义后立即执行,也就是常说的iife 使用场景:当你需要在程序启动时执行一些初始代码,这些初始化的工作只需要执行一次,而且当中用到的临时变量以后将不再有用,这时就可以把这些代码放到一个即时函数中执行 即时函数也是闭包的一种形式 |
即时函数是指定义后就立即调用的匿名函数,可以开辟一个独立的作用域,如果在即时函数中定义一个的变量被内部函数捕获使用,这个函数就形成了闭包。 |
即时函数IIFE会形成闭包,但不是经典的闭包 |
立即执行函数定义:此类函数没有声明,在一次执行过后即释放。适合做初始化工作。 立即执行函数使用场景
var num = (function (a,b,c){
var d = a+b+c
return d;
}(1,2,3))
在jq中经常看到这样的代码;(function ( $, window, document, undefined ){
//函数体内具体代码
})(jQuery, window,document); 1.为什么要传入 jQuery 2.window,document参数 3.undefined 4.为什么我们有时候会看到自执行函数前面有分号";" |
1.看过jQuery源码的人应该知道,jQuery开篇用的就是立即执行函数。立即执行函数常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),开发者们想到的解决办法就是使用立即执行函数。
$('#myDiv').test();
|
即时函数 即 立即执行函数,是一种js语法,当一个函数不需要在其他地方调用,只需要执行这一次时可以使用 |
即时函数的应用
|
即时函数是一种利用JavaScript函数生成新作用域的编程方法, 常应用于
|
自执行函数自身创建了一个函数作用域,在这个即时函数内如果有函数引用了外部但是在即时函数内的变量就形成了闭包。之所以能使用闭包是因为即时函数创造了一个函数作用域的环境。即时函数的经典使用就是生成单例,umd模块的封装。
|
即时函数:即时函数(IIEF)是一种特殊的JavaScript语法,可以使函数在定义后立即执行,它也是闭包使用的一种形式。
优点:
应用
|
即时函数顾名思义,就是在创建函数后立即调用的函数; |
即时函数是指定义完了就立刻被调用执行的函数 由于即时函数只能执行一次,执行完了立马消失 所以通过在即时函数内部来调用闭包,既不会重复创建闭包,也不会对当前作用域造成任何污染 eg: |
即时函数是匿名函数的另一种应用。什么是即时函数?即时函数就是函数在定义后可以被立即调用 函数前加运算符的作用就是将匿名函数或函数声明转换为函数表达式。
|
即时函数即时函数又叫立即执行函数,顾名思义,是一种在定义后立即执行的函数. 应用场景普通场景因为函数执行后销毁,内部变量也会被回收,所以在我们不想留下全局变量以及避免命名冲突的时候可以用到即时函数。 和闭包配合使用即时函数和闭包配合使用可以开辟一个独立的作用域,内部的变量可以用来保存状态,并且是外部访问不到的。
|
闭包的特性是内部函数持续维护外部函数执行期间的作用域,形成自己的独立作用域; |
即时函数,就是函数定义后立即执行。类似下面这样的写法 (function (){
console.log('111')
})() 即时函数有以下特点:
即时函数有以下优点:
闭包和即时函数的应用,其实惰性函数算一种,如下,即时函数执行后会给Fn赋值一个新的函数,这段代码的用在做环境判断的时候最合适。 const Fn = (function(){
if(a){
return function(){
console.log('环境a这么处理')
}
}else if(b){
return function(){
console.log('环境b这么处理')
}
}
})() |
立即执行函数,我们就把它简称为即时函数好了。它的使用场景就是我们不需要一个函数一次定义,多次调用,我们只需要一个函数作用域来做一些防止命名冲突,防止全局污染这些事情,这就是即时函数的作用。 那么在即时函数中,我们也可以使用闭包。在即时函数中,我们返回一个函数,然后这个函数用到了即时函数的本地变量,那么,这就是闭包和即时函数的联合使用。 |
即时函数:Immediately-Invoked Function Expression。简写为IIFE。意思就是函数定义之后立马被执行。 |
The text was updated successfully, but these errors were encountered: