js变量作用域和闭包的示例
<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变量作用域和闭包的示例的更多相关文章
- 原型模式故事链(5)--JS变量作用域、作用域链、闭包
上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全 ...
- JS之作用域与闭包
JS之作用域与闭包 作用域在JS中同样也是一个重要的概念.它不复杂,因为ES5中只有全局作用域和函数作用域,我们都知道他没有块级作用域.但在ES6中多了一个let,他可以保证外层块不受内层块的影响 ...
- [刘阳Java]_步步窥探JS变量作用域
今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习 ...
- [js]js代码执行顺序/全局&私有变量/作用域链/闭包
js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...
- javaScript的闭包 js变量作用域
js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...
- 你不知道的JS之作用域和闭包(五)作用域闭包
原文:你不知道的js系列 一个简单粗暴的定义 闭包就是即使一个函数在它所在的词法作用域外部被执行,这个函数依然可以访问这个作用域. 比如: function foo() { var a = 2; fu ...
- 解析js中作用域、闭包——从一道经典的面试题开始
如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎 ...
- 你不知道的JS之作用域和闭包 附录
原文:你不知道的js系列 A 动态作用域 动态作用域 是和 JavaScript中的词法作用域 对立的概念. 动态作用域和 JavaScript 中的另外一个机制 (this)很相似. 词法作用域是 ...
- js中作用域和闭包
作用域链实例 (1) function example() { var age = 23; alert(age) } var age = 25; example(); alert(age); // ...
随机推荐
- 文件类似性推断 -- SimHash
近期调研了一下simhash算法,它主要用在谷歌网页去重中.网上有非常多原理性的介绍. 既然能够用来推断文件的相似性,就想知道效果怎么样.simhash的准确度是否依赖于分词算法?是否和simhash ...
- 个人andriod实习小作品,个人联网笔记本
个人联网笔记本 个人信息:就读于燕大本科软件project专业 眼下大四; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将来从事算法工 ...
- 正睿NOIP赠送附加赛1
T1:math 题目链接: http://zhengruioi.com/contest/156/problem/471 题解: 先讲讲我的乱搞做法.对于前面70%,我跑了背包.因为背包有后效性...我 ...
- (转载)Android自定义ProgressDialog进度等待框
Android自定义ProgressDialog进度等待框 作者:无缘公子 字体:[增加 减小] 类型:转载 时间:2016-01-11我要评论 这篇文章主要介绍了Android自定义Progress ...
- ORA-01658无法为表空间中的段创建INITIAL区
导出空表设置时,提示错误是: ORA-01658无法为表空间中的段创建INITIAL区 查找解决方案为 表空间已满 设置表空间自动增长 即可 例: alter database datafil ...
- 为什么同样的数据,俩人生成的obj和bin文件不一样
http://bbs.csdn.net/topics/270055083 编译器编译的时候可能有些东西依赖时间,或许是优化的原因,如果可以,换个编译器试试,或许两次编译的时候,强制把系统时间调成一个看 ...
- 用Maven创建第一个web项目Struts2项目
一.创建一个web项目 参考前面文章,项目名:maven-struts-demo. 二.配置pom.xml文件添加struts2依赖 <project xmlns="http://ma ...
- js邮箱,汉字,数字 表单验证
//电子邮箱验证 function isEmail(str) { var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_ ...
- 连类比事-category和extension
extension看起来很像一个匿名的category,但是extension和有名字的category几乎完全是两个东西. extension在编译期决议,它就是类的一部分,在编译期和头文件里的@i ...
- 计算 List 数据的属性值的总和
List<PostRushPretreatmentMember> taskMember = pre.getTaskMember();///成员分配情况 Integer taskOrderN ...