匿名函数/变量作用域

匿名函数:没有名字的函数

<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全局对象来声明,全局对象的属性对应也是全局变量,详细如下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值