js 中 三种 作用域 详解 (全局 , 函数, 块级)
-
全局变量: 声明在函数外部是的变量 (所有没有用 var 直接赋值的变量 都属于 全局变量)
-
布局变量: 声明在函数内部的变量 (所有没有用 var 直接赋值的变量 都属于 全局变量)
js 中 变量声明 分为 显式声明 和 隐式 声明。
var i = 100 // 显式 声明
i = 100; // 隐式 声明
在 函数中
使用 var 关键字 进行 显式 声明 的 变量 是作为 局部变量, 而 没有 用 var 关键字,使用直接 赋值方式 声明 的是 全局变量。
当我们 使用 访问一个 没有声明 的变量时,js 会 报错。 如下:
alert(aaa) // 报错 aaa is not undefin
而 我们 给 一个 没有声明 的变量 赋值时,js 不会报错, 相反 它会认为 我们 是 要 隐式 声明 一个 全局变量,这一点 一定 要注意。
num = 10;
// 隐式 声明
全局作用域 针对 全局变量 来说 :
alert(c);//输出undefind
// alert(d);报错错
var c=3;
function test(){
var a=1;
b=2;
alert(c)//输出三
}
alert(c);//输出3
test();
全局变量在整个 上下 都有效 , 只是在没有 赋值之前调用,会输出 undefined。
函数作用域 是 针对 局部变量 来说的, 在 函数中 定义的 变量 在 函数 外不能获取。
function test(){
alert(a);//声明 未赋值输出undefine
var a=1;
alert(a);//1
}
// alert(a);报错,外部获取不到
test();
//alert(a);保存不能输出
块级作用域
概念'{}' 中间部分 都是 块级作用域 ex(测试) : for while if ,中 没有 作用域,
但是,可以用 闭包 实现类似功能。
var i=1;
if(i==1){
var b=2;
}
alert(b);//输出2
for(var j=0;j<=2;j++){
var c=3;
}
alert(c);//输出3
网友评论