<script type="text/javascript" language="javascript"> function test(){ var really=(function(obj,num,str){ return function(){ return obj+num+str; } })(null,123,"good"); var v=really("oh","fell","good"); alert(v); } test(); </script>
<script type="text/javascript" language="javascript">
function test() { //这个是直接调用的匿名函数,参数已设定,不可修改. ///(function (obj, num, str) { //中间代码略. /// })(null, 123, "good"); var really = (function (obj, num, str) {
///匿名函数,没有变量执行,外部不可调用.但是因为有really这个变量间接指向,所以还是可以调用的. ///function () { /// return obj + num + str; /// } return function () { return obj + num + str; } })(null, 123, "good");
///所以这样调用,结果一样的. var v = really(); alert(v);
} test();//第一步执行test(),这个测试的结果是:123good. </script>
虽然知道是闭包,原理还不是很清楚,关注下
1. really 被值为 function(){ return obj+num+str; } // 而 obj+num+str 的值为 123good
2. 现在调用 really("oh","fell","good") // really本身是个无参函数,所以这三个值不能做为 obj,num,good的值,而是在 arguments里面,其 arguments.length=3
3. 最后 v 值是闭包的值 123good,如果要取"oh","fell","good",则只能在 arguments 取
就是语法,能看懂会用就行。
学习了