文档章节

深入理解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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部