不一定需要。var func = (function(){ var a = 20; function b(){ alert(a) } b(); })();
对于这一堆代码,哪里才叫闭包。 var func = (function(){ var a = 20; function b(){ var b = a; } b(); })();http://baike.baidu.com/view/648413.htm?fr=aladdin 闭包是可以包含自由(未绑定到特定对象)变量的代码块为什么红色那个叫闭包? 因为有个变量a. 变量a不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)当b()时候,他所处那个环境中? 就这段代码来说,他处在window中。
不一定需要。var func = (function(){ var a = 20; function b(){ alert(a) } b(); })(); 那我可以不可以理解为return的作用是相当于给外部一个接口,来操作内部的变量,是对闭包特性的一个应用?只要是这种形式 (function(){ var a = 20; function b(){ alert(a) } })() 就会形成一个闭包(函数b有对外部变量a的引用,a是匿名函数的局部变量)?
不一定需要。var func = (function(){ var a = 20; function b(){ alert(a) } b(); })(); 那我可以不可以理解为return的作用是相当于给外部一个接口,来操作内部的变量,是对闭包特性的一个应用?只要是这种形式 (function(){ var a = 20; function b(){ alert(a) } })() 就会形成一个闭包(函数b有对外部变量a的引用,a是匿名函数的局部变量)? 一个函数默认都是有个return,只是有时候我们不需要你明确的返回,比如一个函数的执行是为了改变一个对象的style。 function a(obj){ obj.style.width = '20px;' }; 但其实他有隐形的返回return undefined; 但有时候我们明确的需要知道返回值,这个值有助于我们的代码继续执行。比如: function b(){ if(isNum(1)){} } function isNum(n){ return typeof n === 'number'; } 而这里边只是把一个函数引用返回给调用者而已,方便调用。是闭包的一种引用。(function(){ var a = 20; function b(){ alert(a) } })()这里边方法要调用,不调用,代码只是一段代码。
var a = 20;
function b(){
alert(a)
}
b();
})();
var func = (function(){
var a = 20;
function b(){
var b = a;
}
b();
})();http://baike.baidu.com/view/648413.htm?fr=aladdin
闭包是可以包含自由(未绑定到特定对象)变量的代码块为什么红色那个叫闭包?
因为有个变量a. 变量a不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)当b()时候,他所处那个环境中?
就这段代码来说,他处在window中。
var a = 20;
function b(){
alert(a)
}
b();
})();
那我可以不可以理解为return的作用是相当于给外部一个接口,来操作内部的变量,是对闭包特性的一个应用?只要是这种形式 (function(){
var a = 20;
function b(){
alert(a)
}
})() 就会形成一个闭包(函数b有对外部变量a的引用,a是匿名函数的局部变量)?
var a = 20;
function b(){
alert(a)
}
b();
})();
那我可以不可以理解为return的作用是相当于给外部一个接口,来操作内部的变量,是对闭包特性的一个应用?只要是这种形式 (function(){
var a = 20;
function b(){
alert(a)
}
})() 就会形成一个闭包(函数b有对外部变量a的引用,a是匿名函数的局部变量)?
一个函数默认都是有个return,只是有时候我们不需要你明确的返回,比如一个函数的执行是为了改变一个对象的style。
function a(obj){ obj.style.width = '20px;' };
但其实他有隐形的返回return undefined;
但有时候我们明确的需要知道返回值,这个值有助于我们的代码继续执行。比如:
function b(){
if(isNum(1)){}
}
function isNum(n){
return typeof n === 'number';
}
而这里边只是把一个函数引用返回给调用者而已,方便调用。是闭包的一种引用。(function(){
var a = 20;
function b(){
alert(a)
}
})()这里边方法要调用,不调用,代码只是一段代码。
因为var func=(function(){var a=20; return function(){alert(a)}})()window.func=(function(){var a=20; return function(){alert(a)}})()
// 代码1:
(function () {
// 这里就是闭包
})();
其实最容易理解的闭包, 就是函数...
'代码1' 是一个特殊的函数, 它没有名称, 它后面跟了执行 '();',
目的就是要执行该匿名函数, 获得它的闭包效果,
这个函数没有名字, 所以以后也不会调用它.// 代码2:
function test () {
// 一个 function , 就是一个闭包环境
}
一个闭包的例子:// test 是一个函数(函数是具体的对象, 闭包是对象的效果. 函数有闭包, 好比太阳有光芒)
function test () {
var count = 0;
return function () {
return (count ++);
};
}var f1 = test(); // 第一个闭包
console.log (f1()); // 输出 0
console.log (f1()); // 输出 1
console.log (f1()); // 输出 2var f2 = test(); // 这次执行, 创建了第二个闭包
console.log (f2()); // 输出 0
console.log (f2()); // 输出 1
console.log (f2()); // 输出 2
即 var func 并不一定就是 window.func.如果把代码二放在一个函数里.function foo () {
var func = (function(){var a=20; return function(){alert(a)}})(); // 代码二 // 这里会成功.
func();
}// 这里就会失败, func 是 foo 的局部变量, 在外部不可访问
func();