浅谈javascript里面的this,作用域和闭包

  首先,我们来看一下在javascript高级程序设计里面关于this的说明:this对象是在运行时基于函数的执行环境绑定的,在全局函数中,this等于window,而当函数被作为某个对象的方法被调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。

重点要记住这么一句话:

执行环境在哪里this指向哪里,this要在执行时才能确认,定义时无法确认。

代码论证:

var name = 'my is window';

var obj = {

name:'my is obj',

fn:function(){

console.log(this.name)

},

fn2:function(){

return function(){

console.log(this.name)

}

},

fn3:function(){

var me = this;

return function(){

console.log(me.name)

}

}

}

obj.fn();//my is obj

obj.fn2()();//my is window

obj.fn3()();//my is obj

obj.fn.call({name:'my is new obj'});//my is new obj

var fn = obj.fn;

fn();//my is window

this主要使用场景

1.在构造函数中

2.在对象中

3.在普通函数中

4.在call,apply,bind中

关于js里面的作用域

1.在es6之前没有块级作用域,只有函数作用域和全局作用域

if(true){

var str = "cc";

}

console.log(str)//cc

var str1 = "1";

function fn1(){

var str2 = "2";

function fn2(){

var str3 = "3";

console.log(str1);

console.log(str2);

console.log(str3);

}

fn2()

}

fn1()
//1

//2

//3

闭包

屌丝定义.一个能读取其它函数内部变量的函数

两个作用:

1.函数作为返回值

2.函数作为参数传递

代码演示:

function fn6(){

var s = "bibao";

return function(){

console.log(s)

}

}

var fn7 = fn6();

var s = "window";

fn7(); //bibao

function fn8(fn){

var s = "function";

fn()

}

fn8(fn7)//bibao

你可能感兴趣的:(浅谈javascript里面的this,作用域和闭包)