1什么是对象

js中的值分为引用值和原始值

原始值:undefined  null  Boolean  string  number  原始值无法更改 存放在栈中

引用值:Array  Object  Function                             引用值可更改 指向引用值的指针存放在栈中 数据存放在堆中 当相互赋值时 只是把栈中的指针赋给对方

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

对象都是通过函数创建的 函数都是对象

语法糖:指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

2. 原型 -- prototype

js函数的默认属性 -- prototype  属性值为一个对象  对象中仅包含constructor  constructor指向函数本身

Object.prototypt

3.隐式原型 --  __proto__

对象有个默认的属性 __proto__ 他绝对等于创建他的函数的prototype

即function a () {}

var b = new a();

b.__proto__ === a.prototype

obj.__proto === Object.prototype

图示

特例

Object.prototype也是个对象 但是他的__proto__ 为null;

另外:__proto__是原型访问器。目前原型访问器,有3类:标准原型访问器Object.getPrototypeOf(object);该访问器,火狐和谷歌差不多都支持。其次,是非标准访问器object.__proto__,对的就是你正在使用的这个,这个访问器,IE不支持,估计也还有其他基于IE内核的浏览器也不支持,所以并不是每一个对象都有它。最后就是通用访问器,object.constructor.prototype去得到原型。

原型链完整图

有待进一步理解

4.typeof()       .. instanceof  ..

typeof()是可以判断括号中参数的类型 但只限于原始类型  在引用类型中 他只返回function/object

A instanceof B 则表示一种继承关系  规则为

沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。

5.原型链

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

fn.hasOwnPrototype(item)  可以判断item是fn本身的 还是fn原型链上的    来自Object.prototype的属性

call  apply等来自js提供的Function.prototype中

6.执行上下文

全局变量下:

变量/函数表达式  --  提前声明  undefined

函数声明             --   提前声明 并赋值

this                      --   赋值

函数下:

在函数声明的时候,内部的自由变量等就已经确定了其作用域  函数每被调用一次,都会生成一个新的执行上下文

7.this的指向

this指向调用该函数的对象

注意

当一个函数被call和apply调用时,this的值就取传入的对象的值

这种情况下函数f的this仍为window

8.执行上下文栈

处于活动状态的执行上下文环境只有一个。

其实这是一个压栈出栈的过程——执行上下文栈

9.作用域

javascript除了全局作用域之外,只有函数可以创建的作用域。

我们在声明变量时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。除了这两个地方,其他地方都不要出现变量声明。而且建议用“单var”形式

作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突

作用域只是一个“地盘”,一个抽象的概念,其中没有变量。要通过作用域对应的执行上下文环境来获取变量的值

作用域中变量的值是在执行过程中产生的确定的,而作用域却是在函数创建时就确定了。

如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。

作用域是静态的组织结构,上下文是动态的计算。

10.自由变量

在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。

自由变量要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”

11.作用域链

12.闭包

闭包应用的两种情况:

函数作为返回值,函数作为参数传递。

使用闭包会增加内容开销

笔记总结来源http://www.cnblogs.com/wangfupeng1988/p/4001284.html

大佬写的很棒

JavaScript原型与闭包相关的更多相关文章

  1. 深入理解javascript原型和闭包系列

    从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然不至于上头条,但是也算是中规中矩,有看的人,也有评 ...

  2. 《深入理解javascript原型和闭包系列》 知识点整理(转)

    深入理解javascript原型和闭包系列 对原型和闭包等相关知识的讲解,由浅入深,通俗易懂,每个字都值得细细研究. 一.一切都是对象 1. typeof操作符输出6种类型:string boolea ...

  3. 《深入理解javascript原型和闭包系列》 知识点整理

    深入理解javascript原型和闭包系列 对原型和闭包等相关知识的讲解,由浅入深,通俗易懂,每个字都值得细细研究. 一.一切都是对象 1. typeof操作符输出6种类型:string boolea ...

  4. 转:深入理解javascript原型和闭包系列

    转自:深入理解javascript原型和闭包系列 从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然 ...

  5. 深入理解javascript原型和闭包 (转)

    该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...

  6. 深入理解javascript原型和闭包(1)——一切都是对象

    “一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的函数——typeof().typeo ...

  7. 深入理解javascript原型和闭包(2)——函数和对象的关系

    上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...

  8. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  9. 深入理解javascript原型和闭包(4)——隐式原型

    注意:本文不是javascript基础教程,如果你没有接触过原型的基本知识,应该先去了解一下,推荐看<javascript高级程序设计(第三版)>第6章:面向对象的程序设计. 上节已经提到 ...

随机推荐

  1. uvm设计分析——reg

    项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源. uvm_reg_field中的volat ...

  2. 面试(I)

    即时通讯 为什么要TCP连接建立3次? 假设是2次: 假如在第1次客户端向服务器端发送请求因为阻塞,客户端会再次给服务器端发送请求,这次服务器端和客户端建立了连接.这样双方就可以发送数据了,发送完以后 ...

  3. consul 集群

    主机运行 : consul agent -server -bootstrap-expect 2  -data-dir D:\consul  -node=winyh -bind=192.168.10.1 ...

  4. hdu4916 Count on the path

    调了好久.... •把树视为以1为根的有向树,然后将1删除 •原树变为一个森林,并且任一棵树的根节点均为原树中1的子节点 •只需要考虑最小编号前3小的三棵树 •记f[x][y]为去掉x和y两棵树后的最 ...

  5. 创建react项目的几种方法

    前言: 构建React项目的几种方式: 构建:create-react-app 快速脚手架 构建:generator-react-webpack 构建:webpack一步一步构建 1)构建:creat ...

  6. Bitmap的秘密

    作者: 周海鹏  来源: infoQ  发布时间: 2015-02-13 11:26  阅读: 4999 次  推荐: 10   原文链接   [收藏] 之前已经参加过几次QCon峰会,不过今年QCo ...

  7. 智能合约 helloworld

    windows 平台 所以直接使用Remix在线编译环境 新建hello.sol文件 编辑如下 Remix 右边侧栏 setting 选择合适的编译器版本 这里选择 0.4.19 文件中输入如下内容  ...

  8. npm使用国内镜像的方法

    一.通过命令配置1. 命令 npm config set registry https://registry.npm.taobao.org 2. 验证命令 npm config get registr ...

  9. 利用python操作excel

    https://zhuanlan.zhihu.com/p/51292549 打开程序:https://segmentfault.com/q/1010000002441500

  10. 20175317 《Java程序设计》第五周学习总结

    20175317 <Java程序设计>第五周学习总结 教材学习内容总结 第五周我学习了教材第六章的内容,了解了接口的知识,学到了以下内容: 明白了什么是接口 学会了如何实现接口 了解了接口 ...