码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-16 23:43:32      阅读:193      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!