Skip to content

Commit 5cb09fa

Browse files
update md
1 parent bc70a57 commit 5cb09fa

File tree

1 file changed

+135
-110
lines changed

1 file changed

+135
-110
lines changed

README.md

Lines changed: 135 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -635,84 +635,85 @@ HTML5?
635635

636636
- 写一个通用的事件侦听器函数。
637637

638-
// event(事件)工具集,来源:github.com/markyun
639-
markyun.Event = {
640-
// 页面加载完成后
641-
readyEvent : function(fn) {
642-
if (fn==null) {
643-
fn=document;
644-
}
645-
var oldonload = window.onload;
646-
if (typeof window.onload != 'function') {
647-
window.onload = fn;
648-
} else {
649-
window.onload = function() {
650-
oldonload();
651-
fn();
652-
};
653-
}
654-
},
655-
// 视能力分别使用dom0||dom2||IE方式 来绑定事件
656-
// 参数: 操作的元素,事件名称 ,事件处理程序
657-
addEvent : function(element, type, handler) {
658-
if (element.addEventListener) {
659-
//事件类型、需要执行的函数、是否捕捉
660-
element.addEventListener(type, handler, false);
661-
} else if (element.attachEvent) {
662-
element.attachEvent('on' + type, function() {
663-
handler.call(element);
664-
});
665-
} else {
666-
element['on' + type] = handler;
667-
}
668-
},
669-
// 移除事件
670-
removeEvent : function(element, type, handler) {
671-
if (element.removeEnentListener) {
672-
element.removeEnentListener(type, handler, false);
673-
} else if (element.datachEvent) {
674-
element.detachEvent('on' + type, handler);
675-
} else {
676-
element['on' + type] = null;
677-
}
678-
},
679-
// 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
680-
stopPropagation : function(ev) {
681-
if (ev.stopPropagation) {
682-
ev.stopPropagation();
683-
} else {
684-
ev.cancelBubble = true;
685-
}
686-
},
687-
// 取消事件的默认行为
688-
preventDefault : function(event) {
689-
if (event.preventDefault) {
690-
event.preventDefault();
691-
} else {
692-
event.returnValue = false;
693-
}
694-
},
695-
// 获取事件目标
696-
getTarget : function(event) {
697-
return event.target || event.srcElement;
698-
},
699-
// 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
700-
getEvent : function(e) {
701-
var ev = e || window.event;
702-
if (!ev) {
703-
var c = this.getEvent.caller;
704-
while (c) {
705-
ev = c.arguments[0];
706-
if (ev && Event == ev.constructor) {
707-
break;
708-
}
709-
c = c.caller;
638+
```javascript
639+
// event(事件)工具集,来源:github.com/markyun
640+
markyun.Event = {
641+
// 页面加载完成后
642+
readyEvent : function(fn) {
643+
if (fn==null) {
644+
fn=document;
645+
}
646+
var oldonload = window.onload;
647+
if (typeof window.onload != 'function') {
648+
window.onload = fn;
649+
} else {
650+
window.onload = function() {
651+
oldonload();
652+
fn();
653+
};
654+
}
655+
},
656+
// 视能力分别使用dom0||dom2||IE方式 来绑定事件
657+
// 参数: 操作的元素,事件名称 ,事件处理程序
658+
addEvent : function(element, type, handler) {
659+
if (element.addEventListener) {
660+
//事件类型、需要执行的函数、是否捕捉
661+
element.addEventListener(type, handler, false);
662+
} else if (element.attachEvent) {
663+
element.attachEvent('on' + type, function() {
664+
handler.call(element);
665+
});
666+
} else {
667+
element['on' + type] = handler;
668+
}
669+
},
670+
// 移除事件
671+
removeEvent : function(element, type, handler) {
672+
if (element.removeEnentListener) {
673+
element.removeEnentListener(type, handler, false);
674+
} else if (element.datachEvent) {
675+
element.detachEvent('on' + type, handler);
676+
} else {
677+
element['on' + type] = null;
678+
}
679+
},
680+
// 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
681+
stopPropagation : function(ev) {
682+
if (ev.stopPropagation) {
683+
ev.stopPropagation();
684+
} else {
685+
ev.cancelBubble = true;
686+
}
687+
},
688+
// 取消事件的默认行为
689+
preventDefault : function(event) {
690+
if (event.preventDefault) {
691+
event.preventDefault();
692+
} else {
693+
event.returnValue = false;
694+
}
695+
},
696+
// 获取事件目标
697+
getTarget : function(event) {
698+
return event.target || event.srcElement;
699+
},
700+
// 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
701+
getEvent : function(e) {
702+
var ev = e || window.event;
703+
if (!ev) {
704+
var c = this.getEvent.caller;
705+
while (c) {
706+
ev = c.arguments[0];
707+
if (ev && Event == ev.constructor) {
708+
break;
710709
}
710+
c = c.caller;
711711
}
712-
return ev;
713712
}
714-
};
715-
713+
return ev;
714+
}
715+
};
716+
```
716717

717718

718719
- Node.js的适用场景?
@@ -747,11 +748,13 @@ HTML5?
747748

748749
- 如何创建一个对象? (画出此对象的内存图)
749750

750-
function Person(name, age) {
751-
this.name = name;
752-
this.age = age;
753-
this.sing = function() { alert(this.name) }
754-
}
751+
```javascript
752+
function Person(name, age) {
753+
this.name = name;
754+
this.age = age;
755+
this.sing = function() { alert(this.name) }
756+
}
757+
```
755758

756759

757760
- 谈谈This对象的理解。
@@ -771,6 +774,7 @@ HTML5?
771774

772775
- 什么是闭包(closure),为什么要用它?
773776

777+
```javascript
774778
就是一个函数里面又套有子函数,在这个函数里面声明的变量可以直接在子函数里面使用而不用再声明
775779
执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.
776780
使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,
@@ -786,7 +790,7 @@ HTML5?
786790
787791
var sayAlert = say667();
788792
sayAlert()//执行结果应该弹出的667
789-
793+
```
790794

791795
- "use strict";是什么意思 ? 使用它的好处和坏处分别是什么?
792796

@@ -830,8 +834,7 @@ HTML5?
830834

831835
1. get是从服务器上获取数据,post是向服务器传送数据。
832836
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,
833-
值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,
834-
将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
837+
值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
835838
3. 对于get方式,服务器端用Request.QueryString获取变量的值,
836839
对于post方式,服务器端用Request.Form获取提交的数据。
837840
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
@@ -854,24 +857,45 @@ HTML5?
854857

855858
- 模块化怎么做?
856859

857-
858-
[ 立即执行函数](http://benalman.com/news/2010/11/immediately-invoked-function-expression/),不暴露私有成员
859-
860-
var module1 = (function(){
861-
    var _count = 0;
862-
    var m1 = function(){
863-
      //...
864-
    };
865-
    var m2 = function(){
866-
      //...
867-
    };
868-
    return {
869-
      m1 : m1,
870-
      m2 : m2
871-
    };
872-
  })();
873-
860+
```javascript
861+
[ 立即执行函数](http://benalman.com/news/2010/11/immediately-invoked-function-expression/),不暴露私有成员
862+
863+
var module1 = (function(){
864+
    var _count = 0;
865+
    var m1 = function(){
866+
      //...
867+
    };
868+
    var m2 = function(){
869+
      //...
870+
    };
871+
    return {
872+
      m1 : m1,
873+
      m2 : m2
874+
    };
875+
  })();
876+
```
874877
- AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?
878+
```javascript
879+
//AMD 依赖前置,提前执行依赖;
880+
//api一个当多个用
881+
//全局require和局部require都叫require
882+
883+
require(['/a','/b'],function(a,b){
884+
a.dosomething();
885+
b.dosomething();
886+
});
887+
888+
//CMD 依赖就近,延迟执行依赖(as lazy as possiable);
889+
//api严格区分,职责单一
890+
//没有全局require,根据模块化系统的完备性 提供seajs.use 来实现模块化的启动
891+
892+
define(function(require,exports,modules){
893+
var a=require('/a');
894+
a.dosomething();
895+
var b=require('/b');
896+
b.dosomething();
897+
});
898+
```
875899

876900
- 异步加载的方式有哪些?
877901

@@ -924,17 +948,18 @@ HTML5?
924948
925949
jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:
926950

927-
$.fn.stringifyArray = function(array) {
928-
return JSON.stringify(array)
929-
}
930-
931-
$.fn.parseArray = function(array) {
932-
return JSON.parse(array)
933-
}
934-
935-
然后调用:
936-
$("").stringifyArray(array)
951+
```javascript
952+
$.fn.stringifyArray = function(array) {
953+
return JSON.stringify(array)
954+
}
955+
956+
$.fn.parseArray = function(array) {
957+
return JSON.parse(array)
958+
}
937959

960+
然后调用:
961+
$("").stringifyArray(array)
962+
```
938963

939964
- 针对 jQuery 的优化方法?
940965

0 commit comments

Comments
 (0)