<script>
/*
js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量 闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什么时候会用这个闭包,然后这个资源会一直占据内存,造成内存泄漏
*/ /*1 --函数内部可以访问外部的变量*/
/*var i = 10; function test() {
console.log(i);
}
test();*/ /*2 在函数外部,我们就不能访问函数内部的变量,不然会报变量没有被定义*/
/*function test() {
var j = 20;
}
console.log(j);*/ //test.html:19 Uncaught ReferenceError: j is not defined /*3 函数的嵌套--这个a函数就能访问test函数的j变量*/
/*function test() {
var j = 5; function a() {
console.log(j);
}
a();
}
test();*/ //5 /*4*/
  /* function test() { if(false) {
var i = 5;
} else {
j = 10;
}
//i--undefined 是没有被赋值而已 j--10
//test.html:42 Uncaught ReferenceError: k is not defined 这就是没有定义--报错 console.log(i+"-->"+j +"-->"+k);
}
test();*/ /*5 -- 这里 在执行的过程中,会将test()这个函数前置,但是在调用它的时候却不会找到j,因为j是在后面定义的*/
/*test(); //undefined
var j = 10
function test() {
console.log(j);
}*/ /*6*/
/*test(); //返回 undefined
var k = 200;
function test() {
console.log(k);
}*/ /*7*/
/*
var k;
test(); //undefined
k = 200;
function test() {
console.log(k);
}
*/ /*其实例子6和7是一个意思,都是变量定义了,但是没被赋值,执行test()的时候,都返回undefined*/ /*9面试题:函数前面加一个波浪线*/
/*var j = 100;
~(function() {
console.log(j);
})(); //返回100
*/ /*10 函数前面没有波浪线的情况*/
/*var k = 5;
(function() {
console.log(j);
})();*/
//返回 --》test.html:89 Uncaught ReferenceError: j is not defined //函数前面加波浪线,此时会将函数转化为一个表达式 输出 所以这个波浪线很重要 /*11面试题:*/
/*var i = 10;
function test() {
console.log(i);
var i;
}
test(); */
// 返回undefined 这里的后面的var i;这条语句会被前置,然后会将外面的全局变量i给覆盖掉,此时这里面的i又没有被赋值,所以,执行test()会返回undefined; 下面12的例子说明这个问题 /*12*/
/*var j = 20;
function test() {
var j;
console.log(j);
j = 5; }
test(); *///返回undefined 和11是一样的,这里在函数内部定义了j 直接把外部的j给覆盖掉了,然后赋值操作又在console语句的后面,所以会出现undefined /*---------------------------分割线----------------------*/
/*13 --这里就是闭包 将我们函数里面的内容用函数的方式返回出去*/
/*function test() {
var j = 5;
return function() {
return j;
}
}
var t = test()();
console.log(t);*/
</script>

深入理解Js的执行过程很重要

这里有,js如何解析函数的

js变量作用域和闭包的示例的更多相关文章

  1. 原型模式故事链(5)--JS变量作用域、作用域链、闭包

    上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全 ...

  2. JS之作用域与闭包

    JS之作用域与闭包   作用域在JS中同样也是一个重要的概念.它不复杂,因为ES5中只有全局作用域和函数作用域,我们都知道他没有块级作用域.但在ES6中多了一个let,他可以保证外层块不受内层块的影响 ...

  3. [刘阳Java]_步步窥探JS变量作用域

    今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习 ...

  4. [js]js代码执行顺序/全局&私有变量/作用域链/闭包

    js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...

  5. javaScript的闭包 js变量作用域

    js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...

  6. 你不知道的JS之作用域和闭包(五)作用域闭包

    原文:你不知道的js系列 一个简单粗暴的定义 闭包就是即使一个函数在它所在的词法作用域外部被执行,这个函数依然可以访问这个作用域. 比如: function foo() { var a = 2; fu ...

  7. 解析js中作用域、闭包——从一道经典的面试题开始

    如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎 ...

  8. 你不知道的JS之作用域和闭包 附录

     原文:你不知道的js系列 A 动态作用域 动态作用域 是和 JavaScript中的词法作用域 对立的概念. 动态作用域和 JavaScript 中的另外一个机制 (this)很相似. 词法作用域是 ...

  9. js中作用域和闭包

    作用域链实例   (1) function example() { var age = 23; alert(age) } var age = 25; example(); alert(age); // ...

随机推荐

  1. ZOJ 3690 Choosing number(dp矩阵优化)

    Choosing number Time Limit: 2 Seconds      Memory Limit: 65536 KB There are n people standing in a r ...

  2. 黑马day15 文件上传&amp;apche的工具包

    1.肯定要导入apche的jar包 2.要使用的类的介绍.. 2.1DiskFileItemFactory  public DiskFileItemFactory(int sizeThreshold, ...

  3. Educational Codeforces Round 6 C. Pearls in a Row set

    C. Pearls in a Row There are n pearls in a row. Let's enumerate them with integers from 1 to n from ...

  4. 19.boost A*算法

    #include <iostream> #include <string> #include <utility> #include <vector> # ...

  5. HD-ACM算法专攻系列(9)——大菲波数

    题目描述: 源码: 运用Java大数求解. import java.math.BigInteger; import java.util.*; public class Main { //主函数 pub ...

  6. Swift学习笔记(8):闭包

    目录: 基本语法 尾随闭包 值捕获 自动闭包 闭包是自包含的函数代码块,闭包采取如下三种形式之一: ・全局函数是一个有名字但不会捕获任何值的闭包 ・嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 ...

  7. Python3.x和Python2.x的区别(转存参考)

    http://www.360doc.com/content/14/0619/23/16740871_388198818.shtml 这个星期开始学习Python了,因为看的书都是基于Python2.x ...

  8. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  9. 路飞学城Python-Day8

    [11.函数-基本介绍]函数引出问题:如果出现这个需求,需要监控单位的服务器状况,当CPU/MEMORY/DISK等指标使用量超过阀值时,就发邮件报警 while True: if CPU利用率> ...

  10. 2015 Multi-University Training Contest 1 y sequence

    Y sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...