详解JS的作用域和闭包
2016-07-07 00:00
369 查看
摘要: 详解JS的作用域和闭包
**1.**Javascript变量的作用域分为两种:全局变量和局部变量,JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。如果出现函数嵌套函数,则就会出现作用域链。
**2.**在JavaScript中如果不创建变量,直接去使用,则报错.
**3.**JavaScript中如果创建值而不赋值,则该值为 undefined
A.函数外部用var关键字声明的,直接声明的都是全局变量(注意,在函数内部,如果不适用var关键字,直接声明的变量是全局变量,如f1()中的d;)
B.函数内部用var声明的变量是局部变量,
2.闭包的概念
通过上面的例子,我们知道,函数外部无法获得函数内部的变量,但有时我们需要获取和使用函数内部的变量,这是我们就要使用闭包了.
闭包:函数外部可以读取其他函数内部的变量的函数.
**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;
相关文章推荐
- 深入理解PHP之匿名函数
- 最后一次说说闭包
- Ruby中使用Block、Proc、lambda实现闭包
- LUA中的闭包(closure)浅析
- Lua中的闭包学习笔记
- C#中函数的创建和闭包的理解
- 简要解读Ruby面向对象编程中的作用域
- JavaScript 学习笔记之变量及其作用域
- 聊一聊JavaScript作用域和作用域链
- 深入理解javascript作用域和闭包
- javascript作用域和闭包使用详解
- 谈谈JavaScript中的函数与闭包
- 细品javascript 寻址,闭包,对象模型和相关问题
- 深入浅析JavaScript中的作用域和上下文
- JavaScript中的闭包原理分析
- 浅谈javascript中的闭包
- 学习javascript的闭包,原型,和匿名函数之旅
- javascript 闭包详解
- 闭包
- js闭包