js函数闭包学习贴
前几天看了《javascript语言精髓与编程实践》对函数闭包的讲解,很有感触,跟大家分享一下。
其实js支持函数闭包的主要原因是因为js需要函数能够保存数据。这里的保存数据是只函数在运行结束以后函数内变量的值也会进行保存。至于为什么js需要在函数内可以保存数据,那就是js是一种函数式语言。在函数内保存数据是函数式语言的一大特征。上代码:
var getValue,setValue; function test(){var value=100;getValue=function (){ return value;}setValue =function (x){ value=x;} }test();alert(getValue());//输出100setValue(200);//设置valuealert(getValue());//输出200function getFunction(){return function (){ alert(value);}}var func1=getFunction();var func2=getFunction();alert(func1==func2)//输出false,表示是两个不同的函数应用。var value=1;function test(){ var value=7;function inline(){var value=4;alert(value);}inline();}test();//输出4var value=1;function test(){ function inline(){ alert(value);}}test();//输出1var getFunc;function test(){ var func= function (){ alert(‘new function ’); } getFunc=function (){ return func;}}test();var func1=getFunc();var func2=getFunc();alert(func1==func2)//输出true;var checkre;function myFunc(){ if(checker){ checker();}alert(‘myFunc:’+str);var str=’ test’;if(!checker){checker=function (){ alert(‘checker:’+str);}}return arguemnts.callee;//返回当前运行函数的引用}myFunc()();//myFunc连续运行两次。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>New Web Project</title> </head> <body> <script type="text/javascript"> var checker; function myFunc(){ if (checker) { checker(); } alert('myFunc:' + str); var str = ' test'; if (!checker) { checker = function(){ alert('checker:' + str); } } return arguments.callee;//返回当前运行函数的引用 } myFunc()();//myFunc连续运行两次。 </script> </body></html>
------解决方案--------------------
弄明白了 this,那闭包也会逐渐开朗!
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
没有看出什么特殊的东西呀
[解决办法]
[解决办法]
谢谢分享!!
[解决办法]