函数声明和函数表达式
函数可以赋值给变量,可以作为参数来传递。
// 声明了一个叫做t的变量,并且变量的内容是 function t(){return 5;}
function t1(){
return 5;
}
alert(t1);
// 函数表达式: 产生一个名为jia的变量
var t2 = function (name){
console.log("这是一个匿名函数"+"+"+name);
};
jia("假某某");
这两种方式效果是不同的。
t1是函数声明,虽然全局内也得到一个t1变量,但值是function
而t2只是一个赋值过程-----值是谁?值是右侧表示式的返回结果,即函数
匿名函数
// 匿名函数: 没有产生变量
(function (name){
console.log("这是一个匿名函数"+"+"+name);
})("假某某");
jQuery的对匿名函数应用
(function(window,undefined){})(window);
这是jquery的最外层代码,
function(window,undefined){}
//内层表达式,返回值是函数,包在小括号内,当作表达式来执行。
function(window,undefined){}()//立即调用。
//而内层函数又没有命名,称为匿名函数
//这种手法,匿名函数,立即执行,不污染全局。称为立即执行匿名函数表达式
//思考为什么传window又不传undefined?
//答:传window是为了速度,
function(){
function(){
function(){
function(){
function(){
document.getElementById('id tag');
//这个document将会沿着作用域层层上找,直到最外层。
}
}
}
}
}
jquery就是为了加快内部查找全局变量的速度,而直接把window以参数的形式传进来
这样window就在jquery内部的AO上
不传undefined是为了安全
因为在IE,Firefox低版本中,undefined竟然可以重新赋值,如undefined = 3;
声明undefined局部变量(名字是undefined而已),同时又不传参,值自然
是undefined,防止了外界对undefined的污染。