文档章节

深入理解js --作用域与闭包

招展君
 招展君
发布于 2015/12/09 23:49
字数 423
阅读 10
收藏 0

作用域

js 是函数级作用域,而其他的语言则是块级作用域

js中内部声明的变量内部都能访问的到

function test(){
	if(false){
		var i = 2;
	}
	console.log(i)
}
//这里报的错是undefined  而不是not define(如果console.log(j)这样才报的是not define)

undefined 和not define 是完全不同的两种东西,前者是声明但是未赋值,后者是压根连声明都没有

test();
var j = 1000;
function test(){ console.log(j)}

//这里报的错依旧是undefined  而不是not define 

其实js真正的执行顺序是这样子的

var j;
test();
j = 1000;
...

闭包

就是拿到本不该属于他的东西
容易造成内存泄露

function test(){
	var t = 10
}
//如果要在外部获取到函数内部的这个t,就应该如下面这种做法
function test(){
	var t = 10;
	return function(){
		return t;
	}
}
var outerT = test()();

~

1.后面跟数字

var n = ~10;//n = -11

~是按位 取反 的意思,但之所以这个取反之后是11而不是10的原因是

它的取反和我们的取相反数有一点区别,它是想把这个数10转换为 二进制数 0000000000000000001010 ,再对这个二进制数取反,0变1, 1变0,是 1111111111111111110101,最后再转换回十进制数就是-11了。

2. ~func()

~function demo(){
	console.log(123)
}()
//方法执行, 这里的~ 的作用就是把后面的这个方法转换成一个表达式。

需要注意的是

var s = ~function(){
...
//或者return 非数字
}()
//这时候的s = -1;

var s = ~function(){}
//~fun  而不是~fun()时候,s的值也是为-1

var s = ~ function (){
	return Number
}()
//这时候的s = Number按位取反后的值

© 著作权归作者所有

共有 人打赏支持
招展君
粉丝 0
博文 8
码字总数 2941
作品 0
闸北
程序员
JavaScript 需要掌握的知识

1.不仅仅是面试,JavaScript 开发者都应该知道的十个概念(https://my.oschina.net/editorial-story/blog/1529543) 2. 深入理解javascript原型和闭包(完结)(http://www.cnblogs.com/wangfup...

IT追寻者
2016/06/25
0
0
javascript深入理解js闭包

一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量...

Yamazaki
2012/06/15
0
0
深入理解JavaScript闭包

一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量...

柯楠
2012/11/02
0
0
Function执行原理 & 闭包

Execution Context 执行期上下文 在java或c语言中,都有块级作用域这个概念,而js中则没有。 在js中,作用域只有一种,即函数级作用域。 而执行期上下文,可以理解为函数的作用域或执行环境。...

烽穹寒渊
07/13
0
0
Function执行原理 & 闭包

Execution Context 执行期上下文 在java或c语言中,都有块级作用域这个概念,而js中则没有。 在js中,作用域只有一种,即函数级作用域。 而执行期上下文,可以理解为函数的作用域或执行环境。...

烽穹寒渊
2016/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
29分钟前
0
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
39分钟前
1
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
6
0
JavaEE——Junit

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Junit Junit又名单元测试,Junit是用来测试Jav...

凯哥学堂
昨天
4
0
读《美丽新世界》

一、背景 十一国庆节从重庆回深圳的时候,做得绿皮车,路上看了两本书:李笑来的《韭菜的自我修养》和禁书《美丽新世界》。 上篇文章已经分享了 读《韭菜的自我修养》,这篇文章来记录一下《...

tiankonguse
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部