2016-10-18 00:14发布
function f1(){ var a=1; return a; }
function f1(){ var b=1; function f2(){ return b; } return f2; }
按照闭包的概念:“函数体内的变量可以保存在函数作用域内的特性就叫做闭包”,第二个才是闭包,但是他们所实现的结果是一样的,他们同样可以实现在函数外面访问函数内部变量的效果,那么第一个f1()函数和第二个具体的区别在哪里呢?
其实 第一个也是闭包,第二个是两重闭包。。函数本身就是一个对象,同时也是一个闭包,不信你可以打开调试功能看一下。对于第二个函数中的 f2() 之所以可以访问 b,是因为闭包内可以访问外部变量,闭包在创建时这些变量就已经被保存了。当然,外部是不可以访问闭包内部的变量,其实闭包用多了,自然就习惯了。
list[i].onclick = function() {
}这样是错误的。
个人感觉第二个函数应该是 return f2;而不是 return f2()。然后在函数外调用,最终可以使用 f1 函数内的 b 变量,这就有闭包的意思了
稍作改动
这个输出是 2,因为 f2 在创建时并不会执行,而在执行时,a 已经改变了。
javascript函数对象内部不仅包含函数代码逻辑,还包含当前的作用域链。函数之间可以通过作用域链关联起来,函数体内部的变量可以保存在函数作用域内这是闭包。第一个只不过返回了个内部变量。并没有涉及到作用域链,通过作用域链关联函数才是js闭包作用关键所在。
闭包的作用在于私有作用域比如:点击list下li,弹出该li的index
是第一个函数f1和第二个函数调用后返回的函数f2的区别吧我觉得区别是第一个函数返回值a是保存在这个函数里面的,第二个返回值b是保存在函数f2外面的f1里,如果在return前做一个++操作应该就能看出区别了
没错就是 local scope
list[i].onclick = (function(a) {
最多设置5个标签!
付费偷看金额在0.1-10元之间
其实 第一个也是闭包,第二个是两重闭包。。
函数本身就是一个对象,同时也是一个闭包,不信你可以打开调试功能看一下。
对于第二个函数中的 f2() 之所以可以访问 b,是因为闭包内可以访问外部变量,闭包在创建时这些变量就已经被保存了。
当然,外部是不可以访问闭包内部的变量,其实闭包用多了,自然就习惯了。
list[i].onclick = function() {
}
这样是错误的。
个人感觉第二个函数应该是 return f2;而不是 return f2()。然后在函数外调用,最终可以使用 f1 函数内的 b 变量,这就有闭包的意思了
稍作改动
这个输出是 2,因为 f2 在创建时并不会执行,而在执行时,a 已经改变了。
javascript函数对象内部不仅包含函数代码逻辑,还包含当前的作用域链。函数之间可以通过作用域链关联起来,函数体内部的变量可以保存在函数作用域内这是闭包。第一个只不过返回了个内部变量。并没有涉及到作用域链,通过作用域链关联函数才是js闭包作用关键所在。
闭包的作用在于私有作用域
比如:点击list下li,弹出该li的index
是第一个函数f1和第二个函数调用后返回的函数f2的区别吧
我觉得区别是第一个函数返回值a是保存在这个函数里面的,
第二个返回值b是保存在函数f2外面的f1里,如果在return前做一个++操作应该就能看出区别了
没错就是 local scope
list[i].onclick = (function(a) {
一周热门 更多>