闭包初涉,求解释?

不求苟同 2012-12-27 05:15:46
参考信息:

function funA(x){
return function(y){
return x*y;
}
}

alert(funA(100)(100));

var uniqueID = (function fun(){
var id = 0;
return function(){
return id++;
}
})();

alert(uniqueID());
alert(uniqueID());
alert(uniqueID());
alert(uniqueID());


求解点:
function fun(x){
return function(y){
return x*y;
}
}

alert(fun(100)小括号A(100));


var uniqueID = (function fun(){
var id = 0;
return function(){
return id++;
}
})小括号B();

alert(uniqueID小括号C());

以上的小括号分别起到的作用是?请从JS语言原理方面解答。

注释:小括号分别指:跟在后面的那个小括号!


附:感谢各位大神参与回答,谢谢
...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
侠龙 2012-12-27
  • 打赏
  • 举报
回复
更正一个错误 var obj = (function(){return function(){alert('b')}}); var obj = (function(){return function(){alert('b')}})();
侠龙 2012-12-27
  • 打赏
  • 举报
回复
所谓闭包,如果从广义上理解是相当复杂的。但是从狭义上理解还是相对比较简单。就是外部不能直接调用内部的函数或者变量。 先从javascript说起吧。 javascript的是闭包的,调用时外部函数不能调用函数内部的变量的。假如想要调用可以让一个函数返回来调用。 function Fruit(){ var b = 'b'; var a = 'a'; } 比如上述代码,Fruit函数内部的变量 b与a ,不能 用 Fruit.a 或者Fruit.b 来调用,同样也不可以用 (new Fruit()).a 或者(new Fruit()).b来调用,这是因为闭包。 如果把想要调用则必须要返回。 function Fruit(){ var b = 'b'; var a = 'a'; return {_a:a,_b:b} } 这样就可以 Fruit()._a 与 Fruit()._b调用到内部变量。 javascript 返回的类型中 有一种类型为 function 可以用typeof 来判断 比如一个 对象 func alert(typeof func) 对于function 类型的对象,都可以在他后面加上()来调用。 比如: var obj = (function(){return function(){alert('b')}}); 比如上述代码的 obj 实际上是function的一个对象,调用 typeof 判断为 function 所以obj是可以调用的。 即 执行 obj(); 可以打印出 b。 理解了javascript中function对象是可以调用的,这一层意思以后 那么就不难理解,下面这句话的意思了。实际是一个匿名函数直接被调用了。 (function(){alert('func')})(); 现在你应该很清楚上面代码的意思了吧。
likeajin 2012-12-27
  • 打赏
  • 举报
回复

function funA(x){
    return function(y){
        return x*y;
    }
}
//alert(funA(100)(100));//==>等价于
var tmp = funA(100);//tmp = function(y){return 100*y}
alert(tmp(100));
 
var uniqueID = (function fun(){
    var id = 0;
    return function(){
        return id++;
    }
})();//执行结果,uniqueID为一个函数,函数体为:function(){return id++}。函数的执行环境中有个私有变量id,只有本函数能访问,每执行一次该函数,id都+1。
alert(uniqueID);
 
alert(uniqueID());
alert(uniqueID());
alert(uniqueID());
alert(uniqueID());

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧