Javascript关键字
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
类似这种函数返回另一个函数的,我们第一次调用只是构建了一个外层函数体对象,只有有后续的调用,才能调用内层函数体,并且重复调用,只会重复内层函数体。