您的位置:首页 > 其它

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

2016-12-21 15:53 218 查看

一   块级作用域: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);


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

内部函数能访问外部函数的作用域,而外部函数则不能访问内部函数的作用域
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: