call和bind改变的上下文环境

  这周自我学习的时间很宽裕。正巧一直对call和apply不甚理解(虽然bind还经常用到,仅仅是知道这么用有这个效果= =,而不知为何有这个效果),下午就自己写写demo,帮助自己理解。

    function add(a, b) {
		console.log(a + b);
	}

	function minus(a, b) {
		console.log(this)
		console.log(a - b);
	}

	minus(1, 2);
	minus.call(add, 1, 2);   

  非常简单的2个函数,下面先给出结果:

    

  这样看就很清晰了,第一次直接用minus(1, 2),控制台输出的this是全局的window,第二次用minus.call(add, 1, 2),控制台输出的this是add()函数。很明显,call改变了上下文的环境。所以将console.log(this)改为console.log(this(1, 2)),第二次将会输出3。

  稍作改变:

	function add(a, b) {
		console.log(a + b);
	}

	function minus(a, b) {
		console.log(this)
		console.log(a - b);
	}

	minus(1, 2);
	var addition = minus.bind(add);
	addition(1,2);

  

  同样先给结果:

    

  函数表达式additon的上下文也变成了add()函数。

    

posted @ 2016-11-24 16:51  悠悠洛  阅读(141)  评论(0编辑  收藏  举报