javascript的作用域和块级作用域概念理解
来源: 阅读:649 次 日期:2016-06-14 10:06:35
温馨提示: 小编为您整理了“javascript的作用域和块级作用域概念理解”,方便广大网友查阅!

作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。讲到这里,首先理解两个概念:块级作用域与函数作用域。

什么是块级作用域呢?

任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。

函数作用域就好理解了(*^__^*) ,定义在函数中的参数和变量在函数外部是不可见的。

大多数类c语言都拥有块级作用域,js却没有。请看下文demo:

//c语言

#include

void main()

{

int i=2;

i--;

if(i)

{

int j=3;

}

printf(%d/n,j);

}

运行这段代码,会出现“use an undefined variable:j”的错误。可以看到,c语言拥有块级作用域,因为j是在if的语句块中定义的,因此,它在块外是无法访问的。

而js是如何表现的呢,再看另一个demo:

functin test(){

for(var i=0;i<3;i++){

}

alert(i);

}

test();

运行这段代码,弹出3,可见,在块外,块中定义的变量i仍然是可以访问的。也就是说,js并不支持块级作用域,它只支持函数作用域,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。

那么我们该如何使js拥有块级作用域呢?是否还记得,在一个函数中定义的变量,当这个函数调用完后,变量会被销毁,我们是否可以用这个特性来模拟出js的块级作用域呢?看下面这个demo:

function test(){

(function (){

for(var i=0;i<4;i++){

}

})();

alert(i);

}

test();

这时候再次运行,会弹出i未定义的错误,哈哈,实现了吧~~~这里,我们把for语句块放到了一个闭包之中,然后调用这个函数,当函数调用完毕,变量i自动销毁,因此,我们在块外便无法访问了。

js的闭包特性is the most important feature((*^__^*) 大家懂的)。在js中,为了防止命名冲突,我们应该尽量避免使用全局变量和全局函数。那么,该如何避免呢?不错,正如上文demo所示,我们可以把要定义的所有内容放入到一个

(function (){

//内容

})();

之中,这时候,我们是不是相当于给它们的外层添加了一个函数作用域呢?该作用域之外的程序是无法访问它们的。

更多信息请查看脚本栏目
下一篇:javascript技巧2
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map