首页 > 编程语言 > 详细

JavaScript闭包中闭包函数this的指向

时间:2016-08-16 23:43:16      阅读:290      评论:0      收藏:0      [点我收藏+]

阅读文章前, 请先阅读阮一峰老师的这篇文章http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

前人写过的, 而且写得很好, 就没必要重复下去了. 只加一些阮老师的文章里没有说的.顺便总结一下.

引用一句话: "闭包就是functions that return function"(出处已经忘记啦)

闭包的类型: 循环闭包, 函数闭包

闭包的特点: 外部访问函数内部的值, 函数内部变量不被回收

函数闭包类型中闭包函数的this指向. 

考虑如下代码: 

var name = "window";
        var object = {
            name : "object",
            getNameFunc : function(){
                return function(){
                    return this.name;
                };
            }
        };
        var obj = {
            name : "object",
            getNameFunc : object.getNameFunc()
        };
        function foo() {
            return this.name;
        }
        console.log(foo());//Window 
        console.log(object.getNameFunc()());  //Window 
        console.log(obj.getNameFunc()); //object

闭包函数无法直接访问包含他的函数的this对象, 因为二者的this指向是不一样的. 

外部函数的this指向调用他的对象, 内部函数的this指向了全局对象, 其实并不难理解.

类比以下两个函数的调用

foo();//Window
object.getNameFunc()(); //Window

实际上, 当调用object.getNameFunc()时, 就像全局对象返回了一个函数, 返回的这个函数和foo函数其实并无两样.

在全局中调用这个返回的函数时, 函数的this自然就指向了全局对象, 就好像调用foo函数一样.

而当object.getNameFunc()在obj内部时, 返回的闭包函数就成了obj 的属性, 此时闭包函数的this就指向了obj对象.

 

JavaScript闭包中闭包函数this的指向

原文:http://www.cnblogs.com/donotcheap/p/5778035.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!