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


阅读文章前, 请先阅读阮一峰老师的这篇文章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对象.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM