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

原创
2015/12/09 23:49
阅读数 29

作用域

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 评论
0 收藏
0
分享
返回顶部
顶部