首页 > 代码库 > 关于-javascript-闭包作用域 记录

关于-javascript-闭包作用域 记录

js想写好 有一些 概念总要理解清楚最近 总结了一些 闭包和作用域的 案例如下

例1.

 1 var name = "The Window"; 2     var object = { 3         name : "My Object", 4         getNameFunc : function() 5         { 6             return function() 7             { 8                 return this.name; 9             };10         }11     };12 13     alert(object.getNameFunc()());//=>The Window

 

这是在网上 搜到的一个例子

先做一个尝试

var name = "The Window";    var object = {        name : "My Object",        getNameFunc : function()        {            return function()            {                return this.name;            };        }    };    alert(object.getNameFunc());//注意这里

返回的是

function()            {                return this.name;            };

那么这个例子 就很好理解 实际上 返回给

var object=this.name //=>this就是window

 

例2.

做了一些改动如下

 

 1 var name = "The Window"; 2     var object ={ 3         name : "My Object", 4         getNameFunc : function() 5         { 6             return (function() 7             { 8                 return this.name; 9             })();10         }11     };12    13     alert(object.getNameFunc());//=>The Window

 

 1  var name = "The Window"; 2     var object ={ 3         name : "My Object", 4         getNameFunc : function() 5         { 6             return (function(_this) 7             { 8                 return _this.name; 9             })(this);10         }11     };12     13     alert(object.getNameFunc())//My Object

匿名函数的写法 第二种应该比较常见 利用作用域的的特性 传参

例3.
自己尝试了一下

 

 1 var oa=0; 2  3     alert(a()());//=>2 4  5     function a() 6     { 7         var oa = 1; 8         ++oa; 9         return b(oa);10     }11 12     function b(oa)13     {14         return function()15         {16             return oa;17         };18     }
 1 var oa=0; 2  3     alert(a()());//2 4  5     function a() 6     { 7         var oa = 1; 8         ++oa; 9         return (function()10         {11             return function()12             {13                 return oa;14             };15         })();16     }

这个例子自己 也不是很清晰 有点迷糊

关于-javascript-闭包作用域 记录