js 创建函数有以下三种方法
1 函数关键字
function foo(x)
{
alert(x);
}
2 匿名函数
var func = function(x)
{
alert(x);
}
3 构造函数
var func = new Function('x','alert(x);');
构造函数每次执行时都解析函数主题 ,频繁调用构造函数效率很低 并且构造函数不能递归使用
关键字函数跟构造函数都有一个致命缺陷 函数体会污染全局变量 全局变量是魔鬼
如下例子解释函数对全局变量造成的污染
var y = 'func';
function foo()
{
y='abc';
}
foo();
alert(y);//这时候的全局变量 y 已经被函数内部改变 (污染)
最好的办法就是匿名函数 jquery 中大量使用匿名函数 避免对全局变量的污染
匿名函数的3种写法 并且函数会自动执行
1 一般的匿名函数
(function(x)
{
alert(x);
})(x);
2 用括号强制执行函数
(function(x)
{
alert(x);
}(x));
3 void
void function(x)
{
alert(x);
}(x);
jquery 中开始就是一个匿名函数
(function(window,undefined){
//jquery code
})(window);
传递undefine的目的是使undefined成为真正的undefined 应为undefiend 可以被重写
undefined = "now it's defined";
alert( undefined );
这段重写代码在除FF外的浏览器里面都被重写。
下面是jquery的整体结构(思路)
(function(window,undefined){
//构造jQuery 对象
var jquery = function(selector,context){
return new jQuery.fn.init(selector,context,rootjQuery);
}
//工具函数 Utilities
//异步队列 Deferred
//浏览器测试 Support
//数据缓存 Data
//队列 queue
//属性操作 Attribute
//事件处理 Event
//选择器 Sizzle
//DOM遍历
//DOM操作
//CSS操作
//异步请求 Ajax
//动画 FX
//坐标和大小
window.jQuery = window.$ = jQuery; jQuery对象的全局变量
})(window);
常用浏览器内核列表
渲染引擎 | JS解析引擎 | 应用浏览器 |
Trident | Chakra(IE9) | IE 系列 |
Presto | Linear A/B Futhark Carakan | Opera |
KHTML | KJS | |
WebKit | Nitro | Safari |
Chromium | V8 | Chrome |