深入理解js --作用域与闭包
深入理解js --作用域与闭包
招展君 发表于2年前
深入理解js --作用域与闭包
  • 发表于 2年前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 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
×
招展君
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: