初识javascript 闭包和变量提升

先上一小段代码:

 1  function outFun(){
 2         var num = 2;
 3         function inFun(){
 4             console.log(num);
 5         }
 6         return inFun;
 7     }
 8     var out = outFun();
 9     out();//2,这里能够访问,其实是把num这个变量往上面一层提升了一下,out()往里面执行了一层。刚刚好在同一层。
10     console.log(num);//浏览器报错,不能访问outFun函数里面的局部变量num

敲黑板,说概念,通俗的说:闭包就是有权访问另外一个函数作用域变量的函数。

再说一个变量提升的概念吧;

1 var scope="global";
2 function scopeTest() {
3     console.log(scope);
4     var scope="local";
5 }
6 scopeTest(); //undefined

相当于下面的代码:

var scope="global";
function scopeTest() {
    var scope;  //但是如果没写var ,scope就是全局变量,不是局部变量了。
    console.log(scope);
    scope="local";
}
scopeTest(); //undefined

原文链接:http://www.cduyzh.com/js-closure/

时间: 2024-10-01 07:44:46

初识javascript 闭包和变量提升的相关文章

javascript闭包、变量提升

一.add(2)(3)求和函数(闭包) 1 function add(x) { 2 var a = x; 3 return function(b) { 4 sum = a + b; 5 console.log(sum); 6 } 7 } 8 add(2)(3); //5 二.变量提升 1 //第一种情况 2 3 var a = 100; //全局变量 4 5 function test() { 6 alert(a); //向上搜索全局变量 -->100 7 a = 10; //没有var修饰,所

Javascript 闭包与变量

1.闭包与变量 JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值.闭包所保存的是整个变量对象,而不是某个特殊的值. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function createFunctions(){      var result=new Array();              for (var i=0;i<10;i++){          result[i]=function(){         

Javascript作用域和变量提升

下面的程序是什么结果? [javascript] view plain copy var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么下面这个呢? [javascript] view plain copy var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 结果是1. 吓你一跳

JavaScript中的变量提升和严格模式

1.什么是变量提升 所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体(作用域)的最顶部. //先声明后使用 var x; console.log(x);// undefined //先试用后声明 console.log(y);// undefined var y; //上面的式子可以写成下面的样子 变量提升:把x,y提升到顶部 var x; var y; console.log(x); console.log(y); ①变量的使用有两种形式,先声明再使用或

初识JavaScript闭包

一个问题引发的思考 在我学习javascript的事件时,有一个小任务是使用JS来实现 li 列表项在鼠标悬浮时会有背景阴影的动态效果,很自然想到用for 来为每个列表项添加onmouseover 和 onmouseout事件来改变和恢复 li 的类名. 如下: 1 <script type="text/javascript"> 2 var Lis = document.getElementsByTagName("li"); 3 4 function a

简单谈一谈JavaScript中的变量提升的问题

1,随笔由来 第一天开通博客,用于监督自己学习以及分享一点点浅见,不出意外的话,应该是一周一更或者一周两更.  此博客所写内容主要为前端工作中遇上的一些问题以及常见问题,在此基础上略微发表自己的一点浅见,如有出现错误,请看到的各位能够不吝赐教,此致谢意. 前几天在某技术群中水的正欢,忽然有群友提出了一个问题,虽然不难,卻是常人忽视的点,且出现次数较多,所以在此写一点东西,提醒一下自己. 2,JavaScript中的var 与 function 首先我们来看下面这个demo var f = fun

JavaScript中变量提升------Hoisting

本文转自 damonlan的文章 http://www.cnblogs.com/damonlan/archive/2012/07/01/2553425.html 前言 因为我在写这文章的时候,百度里找资料,找到了园友的一篇文章,写的很好,可是我写了又不想放弃,所以就在里面拿了很多东西过来!~~ [翻译]JavaScript Scoping and Hoisting 希望得到大家谅解. 因为这个问题很是经典,而且容易出错,所以在介绍一次.哈哈.莫怪哦. 一.案发现场 我们先看一段很简单的代码: v

傻瓜学习JavaScript闭包(译)

在<高级程序设计>中,对于闭包一直没有很好的解释,在stackoverflow上翻出了一篇很老的<JavaScript closure for dummies>(2016)~ 出处:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work 闭包不是魔法 本文旨在用JavaScript代码让程序员理解闭包,函数式编程的程序员或者导师请绕行. 只要理解了闭包的核心理念,闭包并不难学.但是通过学习一

那些年,我们误解的 JavaScript 闭包

说到闭包,大部分的初始者,都是谈虎色变的.最近对闭包,有了自己的理解,就感觉.其实我们误解闭包.也被网上各种说的闭包的解释给搞迷糊. 一句话:要想理解一个东西还是看权威的东西. 下面我来通俗的讲解一个闭包的知识.(建议大家去读JavaScript权威指南) 我们先弄明白几个问题: 1.作为命名空间的函数: 在函数中声明的变量在整个函数体内都是可见(包括嵌套的函数)在函数的外部不是可见的.不在任何函数内声明的是全局变量 ===>也就是说:一个函数它就是一个作用域,不管你里面有什么东西.他们都是一家