js函数--闭包和this对象

闭包

闭包是指有权访问另一个函数作用域中的变量的函数。
闭包只取到包含函数中任何变量的最后一个值,如下所示:

function createFunctions() {
    var result = new Array();
    for(var i = 0; i< 10; i++){
        result[i] = function() {
            return i;
        }
    }
    return result;
}

这个函数会返回一个函数数组,每个函数返回的都是10;可以通过创建另一个匿名函数实现函数数组返回他们的索引值:

function createFunctions() {
    var result = new Array();
    for(var i = 0; i< 10; i++) {
        result[i] = function(num) {
            return function() {
                return num;
            }
        }(i);
    }
    return result;
}

关于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

如果想访问object的对象,可以把this保存在闭包可以访问的变量中:

var name = "The window";
var object = {
    name : "My Object",
    getNameFunc: function() {
        var that = this;
        return function() {
            return that.name;
        }
    }
};

有些情况下this的值会发生改变:

var name = "The window";
var object = {
    name: "My Object",
    getName: function() {
        return  this.name;
    }
}

object.getName(); //"My Object"
(object.getName)(); //"My Object"
(object.getName==object.getName)() // "The window"

(object.getName==object.getName)()这个先执行了一条赋值语句,然后调用赋值后的结果,因为这个赋值表达式的值是函数本身,所以this的值得不到维持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值