摘要:
一、 模块模式介绍 随着网页越来越像桌面程序的大流,Javascript模块化编程已经成为了一个迫切的需求。所谓模块, 就是实现特定功能的一组方法。C++,Java等语言对模块化的实现表现在给类提供私有和公共封装。由于Javascript不支持“类”,因此它需要基于闭包的特性,使用“模块模式”的设计模式,来实现Javascript的模块化编程。 以下是实现模块化的方法: 1.1 原始写法function m1 { // ...... }function m2 { // ......} 缺点: 污染全局命名空间;可能与其他模块有命名冲突,难以看出模块成员之间的关系 1.2 对... 阅读全文
摘要:
一、三种事件绑定的介绍 1. DOM0 事件处理程序的传统方式 1.1 绑定方法 将处理函数赋值给元素(包括window和document)的事件处理程序属性 eg.var btn = document.getElementById("btn1");btn.onclick = function() { alert("button clicked"); } 1.2 作用域 在元素的作用域中运行。即this引用当前元素。 1.3 处理阶段 在bubble阶段运行。 1.4 移除事件处理程序 btn.onclick = ... 阅读全文
摘要:
我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下。但我一直不明白这是怎么算出来的,因此通过阅读《算法导论-第2版》的2.2节,使用对插入排序最佳时间复杂度推算的方法,来计算冒泡排序的复杂度。1. 《算法导论》2.2中对插入排序最佳时间复杂度的推算 在最好情况下,6和7总不被执行,5每次只被执行1次。因此, 时间复杂度为O(n)2. 冒泡排序的时间复杂度 2.1 排序代码public void bubbleSort(int arr[]) { for(int i = 0, len = arr.length; i < len - 1; i++) {... 阅读全文
摘要:
主方法(master method)给出求解以下形式递归式的“食谱”方法主定理:T[n] = aT[n/b] + f(n)其中a>=1 and b>1是常量,并且f(n)是一个渐进正函数考虑以下三种情况:1. 如果f(n)=O(n^(logb(a) - E))对于某个常量E>0成立,那么T[n]=O(n^(logb(a)))2. 如果f(n)=O(n^(logb(a))),则T[n]=O(n^(logb(a)) ^ logn)3.如果f(n)=O(n^(logb(a) + E))对于某个常量E>0成立,且对常数c<1有足够大的n,有af(n/b)<=cf(n 阅读全文
摘要:
快速排序利用了分治法的算法思想。1. 分治法的基本思想 将原问题分解为若干个规模更小的但结构与原文题相似的问题。递归地解决这些子问题。2. 变速排序的基本思想 在R[low.......high]中选择一个记录作为基准,将序列划分为左、右两个较小的子区间,使左边的序列均小于基准值,右边的序列均小于基准值。3. 代码void quickSort(int arr[], int start, int end) { // 当start < end或start == end时不做任何操作 if(start < end) { int pivotpos = partition(arr, sta. 阅读全文
摘要:
在写Javascript的时候,突然对变量的赋值与传递感到迷惑。因此回顾了一下C,C++,Java等语言的赋值与传参机制,帮助理解Javascript中的赋值与传参。一、Java中,变量的赋值与传递 1. 变量的类型 分为两种:基本类型和引用类型。其中, 基本类型有:boolean, byte, short, int, long, char, float, double 引用类型有:class, interface, array 2. 变量的赋值 2.1 简单类型变量的赋值 按值传递,将数值存放到变量的存储单元中。 2.2 引用类型变量的赋值 ... 阅读全文