JavaScript基础学习笔记(二)

函数定义

函数的声明

function functionName(parameters){
	code;
}

函数表达式

JS函数可以通过一个表达式定义,函数表达式可以存储在变量中。当存储在变量中之后,变量也可以作为一个函数使用。函数表达式实际是一个匿名函数,是执行语句,已分号结尾。

var x = function(a,b) {return a * b};
var z = x(4,3);

Function()构造函数

函数可用JS构造器来定义。Function()。实际上不必使用构造函数,JS中应避免使用new关键字。

var mayFunction = new Function("a","b","return a * b");
var x = myFunction(4,3);

函数提升(Hoisting)

提升(Hoisting)是JS默认将当前作用域提升到前面去的行为。 so,函数可以在声明之前调用。

自调用函数

函数表达式可以 “自调用”。

自调用表达式会自动调用。

如果表达式后面紧跟 () ,则会自动调用。

Y不能自调用声明的函数。

通过添加括号,来说明它是一个函数表达式:

(function () {
    var x = "Hello!!";      // 我将调用自己
})();

函数是对象

函数可以作为一个值使用。

JS函数带有属性和方法。 arguments.lenth属性返回函数调用过程接收到的参数个数: function myFunction(a, b) { return arguments.length; }

toString()方法将函数作为一个字符串返回:var text = myFunction.toString();

函数参数

JS函数对参数的值不进行任何检查。

显式参数和隐式参数

函数显式参数在函数定义时列出,隐式参数在函数调用时传递给函数真正的值。

默认参数

如果函数在调用时缺少参数,参数会默认设置为undefined(undefined为FALSE)。建议最好为参数设置一个默认值。

简单方式: function myFunction(x, y) { y = y || 0; }

Arguments对象

JS函数有个内置的arguments对象,包含了函数调用的参数数组。

function findMax() {
    var i, max = 0;
    for (i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}

函数的调用

JS函数有4种调用方式,每种方式的不同在于this的初始化。

this指向函数执行时的当前对象。

全局对象

当函数没有被自身的对象调用时,this的值就是全局对象。在 web 浏览器中全局对象是浏览器窗口(window 对象)。该实例返回 this 的值是 window 对象。使用window对象作为一个变量容易造成程序崩溃。

function myFunction() {
    return this;
}
myFunction();                // 返回 window 对象

函数作为方法调用

用实例创建一个对象,对象带有属性和方法。

var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // 返回 "John Doe"

使用构造函数调用函数

如果哈数调用前使用了new关键字,则是调用了构造函数。

function myFunction(arg1,arg2){
	this.firstName = arg1;
	this.lastName = arg2;
}
var x = myFunction("John","Doe");
x.firstName; // 返回"John"

作为函数方法调用函数

JS中函数是对象,他有自己的属性和方法。all(),apply()是预定义的函数方法,两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

function myFunction(a, b) {
    return a * b;
}
myFunction.call(myObject, 10, 2);      // 返回 20
// myArray = [10,2];
// myFunction.apply(myObject, myArray);   // 返回 20

JS闭包

JS私有变量可以用到闭包。 变量声明如果不使用var关键字,那它就是一个全局变量。

自我调用函数,闭包:

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// 计数器为 3

变量add指定了函数自我调用的返回字值。

自我调用函数只执行一次。设置计数器为0。并返回函数表达式。

add变量可以作为一个函数使用。它可以访问函数上一层作用域的计数器。

这个叫做JS闭包。它使得函数拥有私有变量变成可能。计数器受匿名函数的作用域保护,只能通过add方法修改。

闭包可以访问上一层作用域里变量的函数,即时上一层函数已经关闭。

HTML DOM

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

通过可编程对象模型,JavaScript获得了足够的能力来创建动态的HTML。

JavaScript 能够改变页面中的所有 HTML 元素

JavaScript 能够改变页面中的所有 HTML 属性

JavaScript 能够改变页面中的所有 CSS 样式

JavaScript 能够对页面中的所有事件做出反应

查找HTML元素

通过ID查找:var x = document.getElementById("intro");

通过标签名查找:var x = document.getElementById("main"); var y = x.getElementsByTagName("p") // 数组

通过类名查找:var x = document.getElementsByClassName("intro") // 数组

改变HTML

改变CSS

document.getElementById(id).style.property = new style

DOM 事件

对事件做出反应

如需在用户点击某个元素时执行代码,则添加JS代码:onclick = JavaScript

HTML DOM分配事件

分配onclick事件,eg:<script>document.getElementById("myBtn").onclick=function(){displayDate()};</script>

一些事件:

HTML DOM EventListener

addEventListener()

element.addEventListener(event,function,userCapture)

addEventListener()允许向同个元素添加多个事件,且不会覆盖已存在的事件。

事件冒泡,事件捕获

冒泡:内部元素的事件先被触发,再触发外部元素事件。

捕获:外部元素事件先被触发,再触发内部元素的事件。

removeEventListener()方法

用于移除由addEventListener()方法添加的事件句柄。

DOM元素

创建新的HTML元素(节点)

如需向HTML DOM添加新元素,必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素。

	<div id="div1">
	<p id="p1">This is a paragraph.</p>
	<p id="p2">This is another paragraph.</p>
	</div>
	<script>
	var para=document.createElement("p");
	var node=document.createTextNode("This is new.");
	para.appendChild(node);
	var element=document.getElementById("div1");
	element.appendChild(para);
	</script>

删除已有HTML元素

	<div id="div1">
	<p id="p1">This is a paragraph.</p>
	<p id="p2">This is another paragraph.</p>
	</div>
	<script>
	var parent=document.getElementById("div1");
	var child=document.getElementById("p1");
	parent.removeChild(child);
	</script>

JavaScript对象

JavaScript中的所有事务都是对象,并且允许自定义对象。对象只是带有属性和方法的特殊数据类型。

JavaScript类

JavaScript是面向对象的语言,但JavaScript不使用类。

在JavaScript中,不会创建类,也不会通过类来创建对象。JavaScript是基于prototype的,而不是基于类的。

Number

属性:

方法:

String

属性:

方法:

Date

方法:

Array

Boolean

如果布尔对象无初始值或者其值为:0,-0,null,”“,false,undefined,NaN,那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 “false” 时)!

Math

Math.round(2.5);

RegExp

浏览器BOM

所有浏览器都支持window对象,它表示浏览器窗口。