函数表达式模仿块级作用域

一   块级作用域:javascript没有块级作用域


什么是块级作用域:举例说明

function outPutNumber(count){
   for(var i=0;i<count;i++){
       alert(i);

}

alert(i);
}
这个个函数中定义了一个for循环,如果实在java,c 等有块级作用域的语言中当变量i出了这个循环,循环一旦结束变量i也就立马会被销毁内存被释放,但是javascript是没有块级作用域的,所以变量i是在outPutNumber()这个函数的活动对象中的,因此从他有定义开始在这个函数内部就死随时可以访问这个变量的。
function outPutNumber(count){
   for(var i=0;i<count;i++){
       alert(i);

}
var i;//var i=2;
alert(i);
}
outPutNumber(5);

javascript从来不会告诉你是不是多是生命了同一个变量,遇到这情况,他就会对后面的声明视而不见(若初始化了就会继续执行)

匿名函数可以避免这个问题,

下面是避免这个问题的方法:


(function (){//这里是块级作用域})();

理解为什么这样做:

var someFunction=function(){//这里是块级作用域};//定义了一个匿名函数并将匿名函数赋予变量someFunction

soomeFunction();//调用匿名函数通过变量后面加()

那么以上代码就等于下面

function (){}();//但是这样会爆出错误,因为function关键字表示的是函数声明而函数声明后面不能跟()

(function (){//这里是块级作用域})()//将前面那个函数加上括号就表示是函数表达式,而函数表达式后面是可以跟()的

function outPutNumber(count){
 (function(){  for(var i=0;i<count;i++){
       alert(i);

}
})();//这样就创建了一个块级作用域当这个循环执行完毕里面的变量就会销毁外面的访问不到

alert(i);//这里现在会抛出一个错误,因为没有定义i
}
outPutNumber(5);


其实块级作用域就是运用了闭包函数,作用域链,作用域,变量对象

内部函数能访问外部函数的作用域,而外部函数则不能访问内部函数的作用域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值