匿名函数:没有名字的函数
<script type="text/javascript">
function (w,h){
document.write("面积是:"+w*h);
}
</script>
//调用匿名函数
<script type="text/javascript">
(function (w,h){
document.write("面积是:"+w*h);
})(3,4)
</script>
js中函数也是一种数据类型,为function类型,既然是数据类型,那么就可以被赋值
//匿名函数的第二中写法
<script type="text/javascript">
//创建
var a=function (w,h){
document.write("面积是:"+w*h);
};
//调用
a(3,4);
</script>
我们知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量
//-----------------form表单onsubmit验证码--------------
$(function(){
verifyCode = new GVerify("v_container");
//加var是局部变量,check()不能访问到verifyCode
//不加var是全局变量,check()能访问到verifyCode
});
function check(){
//var verifyCode = new GVerify("v_container");
var res = verifyCode.validate($("#code").val());
alert(res);
if(res){
return true;
}else{
return false;
}
}
//-------------------------------------------------------
若都用var修饰变量,var修饰的变量在函数体内为局部变量,var修饰的变量在函数体外为全局变量
var a = 10;
function test(){
a = 100;
console.log(a);
console.log(this.a);
var a;
console.log(a);
}
test();
程序的运行结果为:100 10 100
输出this.a,我们都知道,函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a,一开始生命了全局变量a=10,所以第5行输出结果为10。
var a = 100;
function test(){
console.log(a);
var a = 10;
console.log(a);
}
test();
程序的运行结果为:undefined 10
Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析,在这个函数中,执行第3行前,可以认为已经声明了变量a,但是并没有定义(这里即赋值),所以第3行输出结果为undefined,
也就是说:函数体内声明了局部变量,就会只使用局部变量,
console.log(a)执行时js预先加载了局部变量的声明,但console.log(a)在赋值前面,所以不能调用a的值,也不会调用全局变量a的值,因为函数内部的局部变量与全局变量a重名了,会使用局部变量
var a = 100;
function test(){
console.log(a);
a = 10;
console.log(a);
}
test();
console.log(a);
程序的运行结果为:100 10 10
因为函数内部声明了全局变量,而函数外部也是全局变量,所以a使用全局变量,全局变量的值为100,后面执行的console.log(a);由于在重新赋值的后面所以后面的全局变量值都是10
使用window全局对象来声明,全局对象的属性对应也是全局变量,详细如下