看到闭包这块的时候瞬间懵逼了,如图求教:
1.其中var result=f1();那是不是result()等价于f1()?
2.还是说f1返回值是f2, result=f1()之后result()等价于f2()?
3.f1中f2在注册的时候声明的时候执行还是,只在返回的时候执行?
ps.需要利用闭包的原因和他的工作原理究竟是什么?
f1函数的返回值是一个函数,所以result是一个函数,而不是调用这个函数的结果
f1()()才是函数的结果。
所谓闭包(closure)其实很简单,没有你想得那么复杂,闭包其实就是说了一件事,那就是在函数内定义的函数,不需要传参数,自动可以共享外侧函数的变量,反之不行。
闭包唯一的好处就是简化代码。方便开发者。
举例
function f1()
{
var a, b;
var f2 = function()
{
var c, d;
};
}
在这里,f2函数内,既可以得到c d的值,也可以直接访问a b的值。相反,f1只能使用a b
对照不用闭包的写法
function f1()
{
var a, b;
var f2 = foo;
}
function foo()
{
var c, d;
}
此时,在foo内,就不能访问a b,除非用参数:
function f1()
{
var a, b;
var f2 = foo;
foo(a, b);
}
function foo(a, b)
{
var c, d;
}
在IE下的JS编程中,以下的编程方式都会造成即使关闭IE也无法释放内存的问题,下面分类给出:
1、给DOM对象添加的属性是一个对象的引用。
范例:
var MyObject = {};
document.getElementById('myDiv').myProp = MyObject;
解决方法:
在window.onunload事件中写上: document.getEl......
答案就在这里:js 闭包 问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。