您的位置:首页 > Web前端 > JavaScript

详解JS的作用域和闭包

2016-07-07 00:00 369 查看
摘要: 详解JS的作用域和闭包

**1.**Javascript变量的作用域分为两种:全局变量和局部变量,JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。如果出现函数嵌套函数,则就会出现作用域链。
**2.**在JavaScript中如果不创建变量,直接去使用,则报错.
**3.**JavaScript中如果创建值而不赋值,则该值为 undefined

A.函数外部用var关键字声明的,直接声明的都是全局变量(注意,在函数内部,如果不适用var关键字,直接声明的变量是全局变量,如f1()中的d;)
B.函数内部用var声明的变量是局部变量,

var a=1;//全局变量
b=2;//全局变量
function f1(){
var c=3;//局部变量
d=4;//全部变量
alert(a);
alert(b);
alert(c);
alert(d);
}

function f2(){
alert(a);
alert(b);
alert(c);
alert(d);
}

f1();//正常依次弹出1,2,3,4
f2();//弹出1,2----因为在f2()中c is not defined,所以程序中断

2.闭包的概念

通过上面的例子,我们知道,函数外部无法获得函数内部的变量,但有时我们需要获取和使用函数内部的变量,这是我们就要使用闭包了.

闭包:函数外部可以读取其他函数内部的变量的函数.

function f1(){
var a=1;  //a是一个局部变量,f1()函数外部无法使用;
function f2(){
alert(a);  //f2()函数是f1()函数的子函数,所以可以调用变量a
}
return f2;
}
var b=f1()

b() //结果为:1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息