this对象-未完

下面的实例,只是基于是用this

 

在闭包中使用this对象可能会导致一些问题,因为 this对象是在运行时基于函数的执行环境进行绑定的:全局函数中,this等于window,当函数被特定于某个对象进行调用时,this代表调用的对象。但是匿名函数的执行环境具有全局性,所以匿名函数中this通常指定为window。

例如:

var name="The Window";

        var object = {

            name: "My Object",

            getNameFunc: function () {

                return function () {

                    return this.name;

                };

            }

        };

        alert(object.getNameFunc()()); //执行结果The Window

上面的代码中,使用this对象进行返回,返回的是全局变量name的值,因为函数在被调用时,都会取得两个特殊变量,this和arguments,内部函数在用this进行搜索时,只会搜索到其活动对象为止,因此使用this永远不可能搜索到外部函数的变量。

不使用this不会出现这种情况

再例如:

 

var name = 1;

        function parentFunc() {

            var name = 6;

            return function () {

                this.name++;

                return this.name;

            }

 

        }

        var fun = parentFunc();

     

        alert(fun());// name前面用this 返回的值是2,不加this,返回的是7

        alert(fun());// name前面用this 返回的值是3,不加this,返回的是8

        alert(fun());// name前面用this 返回的值是4,不加this,返回的是9 因为产生了闭包,所有不加this的name可以看做为内部的静态变量

上面的代码体现了用this和不用this 的区别,用this只是指定当前的return函数的作用域加上全局作用域。而不使用,则可以直接访问外部作用域。

如果解决这种问题,可以在返回函数的上方将外部作用域指定给一个变量,如:

var name="The Window";

        var object = {

            name: "My Object",

          

            getNameFunc: function () {

                var that = this;

                return function () {

                    return that.name;

                };

            }

        };

        alert(object.getNameFunc()()); //My Object

 

posted @ 2016-04-15 15:03  8932809  阅读(129)  评论(0编辑  收藏  举报