JavaScript的作用域和块级作用域概念理解
来源:互联网 发布:怎么删除kingroot软件 编辑:程序博客网 时间:2024/06/08 16:04
作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。讲到这里,首先理解两个概念:块级作用域与函数作用域。
什么是块级作用域呢?
任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
函数作用域就好理解了(*^__^*) ,定义在函数中的参数和变量在函数外部是不可见的。
大多数类C语言都拥有块级作用域,JS却没有。请看下文demo:
//C语言
#include <stdio.h>
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的作用域和块级作用域概念理解
- JavaScript的作用域和块级作用域概念理解
- JavaScript的作用域、块级作用域(私有作用域)概念理解
- JavaScript的作用域和块级作用域
- javascript之块级作用域的概念和闭包
- 没有块级作用域的javascript...
- 关于javascript的块级作用域
- JavaScript块级作用域
- Javascript块级作用域
- JavaScript 作用域和作用域链的一些理解
- JavaScript笔记:函数作用域和块作用域
- Javascript的块作用域和Java,C++的区别
- JavaScript中区块(block)的作用域
- Javascript没有块级作用域(let 和var)
- 重温javascript--垃圾回收机制和块级作用域
- JavaScript闭包-块级作用域和私有变量
- JavaScript中的块级作用域和私有变量
- JavaScript中的块级作用域和私有变量
- HTTP协议的方法
- js中三种作用域详解(全局,函数,块级)
- [bigdata-110] spring-cloud-06 Hystrix断路器
- 网络编程
- linux的netlink接口详解(中)
- JavaScript的作用域和块级作用域概念理解
- 【实践】Spark RDD API实战
- 快捷安装ZendStudio13.5简体中文语言包
- 第2章 基本语法
- 迷宫问题
- 深入理解JS中的变量作用域
- servlet中添加log4j
- BZOJ 2440: [中山市选2011]完全平方数 莫比乌斯 容斥原理 二分
- ThinkPHP5-简单的批量查询