Js学习

总结自:https://www.cnblogs.com/wangfupeng1988/p/3977924.html

1. hasOwnProperty();

返回Boolean类型, 如果对象object有该属性, 返回true, 否则返回false
需要注意的是该方法不会检查对象的原型链中是否存在该属性, 该属性只有是对象本身的一个成员才会返回true;

2. 函数和对象的关系

函数就是对象的一种, 但函数和其他比如数组对象不一样, 它们间不仅仅是一种包含和被包含关系:

对象可以通过函数来创建, 或者说绝对一点, 对象都是通过函数来创建的.

3. 啥是对象呢?

一切引用类型都是对象, 对象就是若干属性的集合

4. prototype 和 _proto_

函数本身拥有prototype这个属性, 这个属性对应的值也是一个对象, 该对象中默认有constructor的属性, constructor指向这个函数本身.
new 函数 生成的对象, 即函数爸爸的儿子, 儿子都有一个_proto_的隐藏属性, 这个隐藏属性引用了爸爸的prototype.即 fn._proto_ === Fn.prototype.

每个函数function都有一个prototype,即原型。这里再加一句话——每个对象都有一个proto,可成为隐式原型。

image.png

5. 原型链

访问一个对象的属性时, 先在基本属性中查找, 如果没有, 再沿着_proto_这条链向上找,这就是原型链.

image.png

image.png

1、Object由Function创造。Function由自己创造Function的prototype又是对象。
2、三个指针:实例指针指向的是原型对象,构造函数指向函数对象,函数对象指向原型对象。

6. 上下文环境

上下文环境是在调用时创建的.

7. this指向谁?

- 构造函数中的this, 指向它new出的孩子.
- 函数作为对象的一个属性, 并作为属性被调用时, this指向该对象.
- call或apply时, this指向call或apply中传入的obj.
- this在原型链中, this代表的是当前对象的值.
- 全局环境下, this指向window.
- 总之一句话,谁调用的函数,this就指向谁.

值得注意的是这种情况:

image.png

函数f虽然是在obj.fn内部定义的, 但他仍是一个普通的函数, this依然指向window.
关于箭头函数中的this:
箭头函数本质是一个匿名内部函数,它没有this.所以this是继承下来的,并且这个继承是在定义函数的时候完成的。

image.png

这种情况下,this继承自module中的this, module是一个对象,它的this为window.


image.png

getX为module对象中的一个方法,方法中的this就是module对象本身。


image.png

同样的,箭头函数中的this来自function()方法,而function方法中的this为module.

image.png

obj.a调用后打出来的是obj对象,而obj.b.c调用后打出的是window对象而非obj,这表示多层对象嵌套里箭头函数里this是和最最外层保持一致的。

箭头函数中的this,到他的父函数中取寻找,本身没有this。

非箭头函数中的this, 看运行的时候,谁调用了,this指向谁。

参考:http://blog.csdn.net/yangbingbinga/article/details/61424363

词法作用域:当一个函数确定下来的时候,就会形成一个词法作用域,window本身为最大的那个词法作用域。箭头函数不会产生词法作用域。箭头函数中的this,就是看它所处的那个词法作用域中的this代表谁。注意,普通函数中的this不遵循这一规则。

8. 作用域

除了全局作用域, 只有函数才能创建作用域, 创建一个函数就创建了一个作用域, 无论你调不调用, 函数只要创建了, 他就有独立的作用域, 就有自己的一个地盘.

9. 作用域链

变量到底指向谁? 要到创建这个函数的那个作用域中取值, 是创建而不是调用, 如果没有找到, 那么就会到上一级的作用域中寻找改变变量, 这种一步一步向上跨的路线, 就是作用域链

10. 闭包怎么理解?

JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。

怎么理解这句话呢:

var foo = function(){
    var name = "exe";
    return function inner(){
        console.log( name );
    }
}
var bar = foo();//这里虽然得到的是函数inner的引用,而不是那一坨代码
bar();//这里开始执行inner函数,回头看看上面加粗的那句话

闭包有什么用? 为了能够读取其他函数内部变量函数.
本质上, 闭包就是将函数内部和函数外部连接起来的一座桥梁.
闭包最大的两个作用, 一个是可以读取函数内部的变量, 还有一个是让这些变量的值始终保持在内存中.
举个闭包的例子:

    function f1(){
    var n=999;
    nAdd=function(){n+=1}//如果不用var命令,相当于申明为全局
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000

补充,可以查看闭包在for循环中的用法:https://www.cnblogs.com/copperhaze/p/6145302.html

11. 闭包和this结合

var obj = {
     name: 'world',
     sayHello: function() {
       return function() {
             console.log('hello', this.name);
       }
    }
}
obj.sayHello()();//hello

结果并没有打印world
将obj.sayHellow()();拆开来写就是这样
var a = obj.sayHello();//返回一个匿名函数。
var result = a();//执行该匿名函数,此时a()函数中的this并未和obj对象绑定,所以直接指向全局对象window.

为什么匿名函数没有取得其包含作用域(外部作用域)的this对象呢?
每个函数被调用时,其活动对象都会自动取得两个特殊变量:this和arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。 《Javascript高级程序设计》

12. 闭包为什么能让其他函数访问内部变量?

以上这个例子, f2被赋给了一个全局变量, 所以f2一直被保存在内存中, 而f2的存在依赖f1, 所以f1也一直在内存中. 在f1()调用结束后, f1()的上下文环境不会出栈, 最终就能一直访问这个上下文环境中的内部变量.

13. es6

let和const:https://www.cnblogs.com/copperhaze/p/6145302.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355