Web 前端开发 让前端飞

JS中的闭包

2017-05-04  本文已影响0人  osoLife

逃脱(内部函数脱离定义它们的外部函数)

全局变量

var n2;
function fn1(){
    var n1=1;
    function fn2(){
        console.log(n1);
    }
    n2=fn2;
}
fn1();
n2(); //1

返回值

function fn1(){
    var n1=1;
    function fn2(){
        console.log(n1);
    }
    return fn2;
}
fn1()(); //1

实现一个变量的累加

全局变量

var num=0;
function add(){
    num++;
    return num;
}
alert(add()); //1
alert(add()); //2

使用闭包

function add(){
    var num=0;
    return function(){
        num++;
        return num;
    };
}
var fn=add();
alert(fn()); //1
alert(fn()); //2

闭包中的this(默认指向window)

var name='moli';
var obj={
    name:'michael',
    fn:function(){
        return function(){
            return this.name;
        };
    }
};
alert(obj.fn()()); //moli(this指向window)
//改变this指向方法一
var name='moli';
var obj={
    name:'michael',
    fn:function(){
        return function(){
            return this.name;
        };
    }
};
alert(obj.fn().call(obj)); //michael(this指向obj)
//改变this指向方法二
var name='moli';
var obj={
    name:'michael',
    fn:function(){
        var _this=this; //obj
        return function(){
            return _this.name;
        };
    }
};
alert(obj.fn()()); //michael(this指向obj)

结束语

如果喜欢本文,记得点赞并加关注哟。

上一篇 下一篇

猜你喜欢

热点阅读