Gather ye rosebuds while ye may

JS笔记


这几天主要是在看JS,小本本上记录了一些(私以为)具有代表性的要点,这里写一遍再加深一下印象。

原型链

code 1/2:

var base = {
	name: 'base',
	getInfo: function() {
		return this.name;
	}
}

var ext1 = {
	id: 1,
	__proto__: base
}

var ext2 = {
	id: 2,
	__proto__: base
}

code 2/2:

function Task(id) {
	this.id;
}

Task.prototype.status = "stopped";

Task.prototype.execute = function() {
	return this.id + this.status;
}

var task1 = Task(1)
var task2 = Task(2)
task1.status = "active";


事件

html如下:

<div id="baba">
	<div id="gege">
		<div id="wo">
		</div>
	</div>
</div>

js:

wo.addEventListener("click", function(e){
	alert("wo");
}, false);

这里false是指注册冒泡事件,若为true就是捕获。
先捕获后冒泡,先注册先执行。
e.stopPropagation()停止冒泡和捕获。
removeEventListener取消注册需要三个参数均相同。


闭包

function a() {      嵌套的func
	var i = 0;      内部变量
	function b() {  
		alert(++i); 内部func向外传递变量值
	}
	return b;       返回内部的func
}
var c = a();        实例化外部func
c();

变量以函数分界,注意不包括for
没有用var的变量默认为全局变量

顺序

css和image加载时不会终止页面加载,js会等加载完再继续。
加载完之后js预编译,优先函数的定义,然后创建var foo = undefined,之后执行,变量才开始在原型链中找值,找不到再到作用域中找。

f();
function f() {
	alert(0);
}

上面由于函数是由构造函数function定义的,所以会先预编译,待执行时f()已经有相应的组成了。

f();
f = function() {
	alert(0);
}

这里f变量的值由匿名函数来,变量在原型链/作用域中找值要晚于顺序执行,所以这段代码运行时会报错,说f并未定义。


以上


抱歉,评论已关闭。
欲参与讨论,请寄 [email protected]