浅谈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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,416评论 1 10
  • 1.函数声明和函数表达式有什么区别 (*) 区别: 函数声明后面的分号可加可不加,不加也不影响接下来语句的执行,但...
    Sheldon_Yee阅读 3,093评论 0 1
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,700评论 0 13
  • 用了一天半的时光阅读了毛姆的著作“刀锋”!先来大致叙述本书的故事线:本书作者用第一人称叙述的,沿用作者的真实姓名毛...
    zs123阅读 3,446评论 0 0