你们项目中什么情况下会用到闭包呢??
麻烦不要把闭包原理这些复制粘贴进来哈,谢谢,我只是想知道你们在项目中什么情况下会用到闭包就行来了
什么情况下才会使用闭包?javascript
答案:2 悬赏:60 手机版
解决时间 2021-02-15 02:49
- 提问者网友:疯子也有疯子的情调
- 2021-02-14 12:24
最佳答案
- 五星知识达人网友:怀裏藏嬌
- 2021-02-14 14:03
只要一个作用域通过某种手段持有了另一个作用域声明的变量或成员(也即存在未销毁的局部变量),这个变量或成员就叫做“闭包”。
用到的情况太多了,JS 对闭包的支持本来就算是它的一个语言特性,随便写写就会出现闭包,你自己写的代码里就会大量的出现闭包(不管你意识没意识到)。
还是举一例吧,拿著名的 jQuery 举例子:
Sizzle.selectors = {
match: matchExpr,
filter: {
"ID": function( id ) {
var attrId = id;
return function( elem ) {
return elem.id == attrId;
};
},
"TAG": function( nodeNameSelector ) {
var nodeName = nodeNameSelector;
return nodeNameSelector === "*" ?
function() { return true; } :
function( elem ) {
return elem.tagName && elem.tagName === nodeName;
};
}
}
}这种 jQuery 源码中选择器的一段代码(太长未粘全),里面 attrId、nodeName 两个局部变量就是闭包。
用到的情况太多了,JS 对闭包的支持本来就算是它的一个语言特性,随便写写就会出现闭包,你自己写的代码里就会大量的出现闭包(不管你意识没意识到)。
还是举一例吧,拿著名的 jQuery 举例子:
Sizzle.selectors = {
match: matchExpr,
filter: {
"ID": function( id ) {
var attrId = id;
return function( elem ) {
return elem.id == attrId;
};
},
"TAG": function( nodeNameSelector ) {
var nodeName = nodeNameSelector;
return nodeNameSelector === "*" ?
function() { return true; } :
function( elem ) {
return elem.tagName && elem.tagName === nodeName;
};
}
}
}这种 jQuery 源码中选择器的一段代码(太长未粘全),里面 attrId、nodeName 两个局部变量就是闭包。
全部回答
- 1楼网友:天凉才是好个秋
- 2021-02-14 15:16
闭包的使用是为保持对某一作用域访问的。
节点onclick 事件触发时 执行function(e){alert(i);}。i指向function(nodes){}函数作用域里面的i。
事件是在 节点绑定函数之后才触发的。这时,i已经循环到nodes.length。i的值就是nodes.length。
为了避免这种情况的发生。
var add = function(nodes){
var i;
for(i=0; i< nodes.length; i+=1){
(function(e){
var that=i;
nodes[that].onclick =function(){
alert(that);
};
})(i);
}
};
直接执行函数 将 i 绑定到事件上。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯