this关键字,在全局范围,函数调用,构造函数,对象方法中指向各不相同,我们还可以手动改变this指向。

一.this关键字

1、概念

this永远指向一个对象,拥有这个对象的值。
在严格模式下,在全局作用域和匿名函数中,this指向window或者undifind.
当this在一个函数內出现的时候,this指向调用这个函数的对象。

2、全局范围内

console.log(this); this指向的是全局变量,浏览器环境下是window。(如果不存在全局变量,就是undefined)

3、函数调用中

function foo(){ console.log(this); } foo ();

this指向全局变量。

匿名函数调用this指向的也是全局变量。

4、对象方法调用

var test = {
		foo: function(){
		console.log(this);
	}
}
test.foo();

this指向的是test对象,即调用者。

5、构造函数

function Foo(){
	console.log(this);
}
new Foo();

this指向的是新创建的对象。

6、 箭头函数

()={
    this.bala = "";
}
箭头函数没有自己的作用域,this会指向外层调用者 obj

7、显示设置this

function foo(a,b){
	console.log(this);
}
var bar = {};
foo.apply(bar,[1,2]);//this的指向是bar
foo.call(1,2);//this的指向是number

8、改变this指向的方法—三种

当我们将方法从对象中拿出来用,但是又希望this指向现在的对象时,需要用到以下函数。 函数原生的方法有call(), apply(), bind()。 1、call方法和apply方法 区别:参数有区别,第一个参数用于改变this值,第一个以后的参数apply必须是数组。

var Person = {
        name:"lixue",
        age:21
    }
    function fn(x,y){
        console.log(x+","+y);
        console.log(this);
        console.log(this.name);
        console.log(this.age);
    }
    fn.call(Person,"hh",20);

2、bind方法 与前两个函数的区别是,调用时不执行函数,只是改变this指向

二.return关键字

return语句

就是用于指定函数返回的值,return 以后的语句不再被执行。

break语句

会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句。由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的。

continue语句

和break语句相似。所不同的是,它不是退出一个循环,而是开始循环的一次新迭代。

for(var i=1;i<=10;i++){ 
	if(i==6) break; 
	console.log(i); 
} 
for(var i=1;i<=10;i++){ 
	if(i==6) continue; 
	console.log(i); 
} 

Return + 匿名函数


var add = function(x){  
    var sum = 1;  
    var tmp = function(x){  
        sum = sum + x;  
    		return tmp;  
    }  
    tmp.toString = function(){  
        return sum;  
    }  
    return tmp;  
} 

alert(add(1)(2)(3)) --> 6 

类似这种函数返回另一个函数的,我们第一次调用只是构建了一个外层函数体对象,只有有后续的调用,才能调用内层函数体,并且重复调用,只会重复内层函数体。