第五周 javascript
布兰登·艾克
ECMAScript    DOM    BOM
DOM document object    文档对象
BOM borwse        浏览器对象

数据类型
String Number Bool Object undefined Null

类型装换:
数据运算中:
undefined 转为 NaN
Null 转为 0

js运行的是事件驱动
根据 执行层级,每一个函数相对一个层级,而同一个层级下的回调函数都会加载到下一个层级。

事件委托

js中的 == 比较运算
类型相同,如下方式比较:
Number:NaN — false;其他无特殊
object:比较引用地址
类型不相同,如下方式比较:
有一个为Number 则 另一个数转为 Number
有一个为String 则 另一个转为

问题 String 与 Bool

call方法:

如果 方法的返回值 是一个对象,使用new的时候,得到的就是这个返回的对象。

事件委托的差异
绑定一个事件,指定 改元素下的某种元素才可以执行。

/*======= JavaScript== 第二天============================================================*/

知识点一: 变量的提升
在方法中某处定义:
— 变量 — 则这个变量的声明将会被提升,相当于 在 方法的第一行就执行,但是赋值的阶段还是在具体的流程中执行。
— 方法 — 与变量类似,并且方法在 变量声明之后。此方式要与 var a_func=function(){} 区别,此处说的是普通函数。
– 变量声明提升,赋值不变,函数定义提升,调用不变。

变量的定义:
函数中使用 var 定义一个变量。正常情况这个变量的作用域是 函数体内。但是使用 var x = y = z = 1。这种方式就会导致y 和 z 为全局变量 x为局部变量。相当于 var x=1; y=1; z=1; 建议写 var x=1,y=1,z=1;

变量的作用域:
A : for (var i=1; i<3; i++) {setTimeout(function(){console.log(i)});}
B : for(var i=0; i<3; i++) { (function(i){setTimeout(function(){console.log(i)})})(i) }
A 的结果 输出三个一样的 3
B 的结果 输出 undefined 1 2 3
在 A中 使用的 i 为全局的变量,在之后的方法中调用的都是同一个全局的 变量 i。
在 B 中,使用
所谓函数作用域就是说:
=》变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。
在C/C++中,花括号内中的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的。
而Javascript压根没有块级作用域,而是函数作用域。

原型(prototype)
prototype上定义的所有属性和方法,都是可以通过其构造的对象直接访问和调用的。也可以这么说,prototype提供了一 群同类对象共享属性和方法的机制。
原型链:
js中所有的都是对象。
实例对象=》原型链
一个方法调用的时候,现在自身查找,如果没有 更具 proto 属性向上查找,找到他的原型对象,如果在他的上级原型对象没有找到,继续向上找,最终找到 Object 对象,如果还是没有找到 则反回 null。
而这些对象基本可以分为两种,
实体对象:一种是实体对象他们具有属性和方法(Array,Number,Object,String,Null,undefind),他们的原型链的终点是 Object,并且在整个链中没有 Function Prototype 方法原型。
非实体对象:这些对象他们是一些抽象的方法。它们自身没有任何的属性。并且在它们的原型链上 有一个 Function Prototype 方法原型

事件

运行期上下文

Tagged on:

发表评论