随笔分类 -  JavaScript

摘要:概念 作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。其本质就是一个指向变量对象的指针列表。在js中,当某个函数被调用时,会创建一个执行环境(execution context)及相应的作用域链。然后使用arguments和其他命名参数的值来初始化函数的活动对象(activati 阅读全文
posted @ 2018-08-12 20:56 魏亚林 阅读(194) 评论(0) 推荐(0) 编辑
摘要:声明提前机制 在JavaScript存在着这样一种预处理机制,即浏览器在解析JS代码时会将var声明的变量和function声明的函数提升到当前作用域的顶部。但是解析JS代码时对var和function关键字声明的对象的处理是不一样的:前者在解析时只是将声明提前了,但是赋值却依旧在原来的位置。而后者 阅读全文
posted @ 2018-08-09 11:29 魏亚林 阅读(512) 评论(0) 推荐(1) 编辑
摘要:JS函数的参数,和其他语言区别非常大。它不在乎你传过来多少个参数,也不在乎传过来的参数是什么类型。即使你定义的函数只接受两个参数,你调用这个函数的时候可以传递一个、三个甚至不传参数。这是因为JavaScript中的参数在内部是用一个数组来表示的。函数接收到的永远是这个数组,而不关心数组中包含哪些参数 阅读全文
posted @ 2018-08-08 23:26 魏亚林 阅读(579) 评论(0) 推荐(0) 编辑
摘要:简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么,假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另 阅读全文
posted @ 2018-08-08 07:53 魏亚林 阅读(1009) 评论(0) 推荐(0) 编辑
摘要:原型对象也不是没有缺点。首先,它省略了为构造函数传递初始化参数这一环节, 结果所有实例在默认情况下都将取得相同的属性值。虽然这会在某种程度上带来一些不方便, 但还不是原型对象的最大问题。原型对象的最大问题是由其共享的本性所导致的。原型中所有属性是被很多实例共享的,这种共享对于函数非常合适。对于那些包 阅读全文
posted @ 2018-08-04 08:56 魏亚林 阅读(288) 评论(0) 推荐(0) 编辑
摘要:由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来,即使是先创建了实例后修改原型也照样如此。如下示例: 以上代码先创建了Person的一个实例, 并将其保存在friend中。然后,下一条语句在Person.prototype中添加了一个方法sayHi()。 阅读全文
posted @ 2018-08-02 10:02 魏亚林 阅读(441) 评论(0) 推荐(0) 编辑
摘要:在JavaScript中创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有的实例共享的属性和方法。如果按照字面意思来理解,那么prototype就是通过调用构造函数而创建那个实例的原型对象。使用原型对象的好处是可以让所有 阅读全文
posted @ 2018-08-02 08:24 魏亚林 阅读(384) 评论(0) 推荐(0) 编辑
摘要:解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问)。至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真的被解释执行。例子: 以上代码完全可以正常运行。因为在代码开始执行之前,解析器就已经通过一个名为函数声明 阅读全文
posted @ 2018-08-01 08:47 魏亚林 阅读(580) 评论(0) 推荐(0) 编辑
摘要:一、<script>标签的位置 传统的做法是将<script>元素放在<head>元素中,例如: 但是这种做法有一个问题,在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaSeript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body 阅读全文
posted @ 2018-07-31 11:26 魏亚林 阅读(1153) 评论(0) 推荐(0) 编辑