# ES5 作用域与闭包
# js 是函数级作用域,在内外部的变量,内部能够访问,外部的不能访问内部的
function test() {
if (false) {
var i = 10;
}
console.log(i); // undefined
console.log(j); // Uncaught ReferenceError: j is not defined
}
test();
test(); // undefined
j = 100;
// test(); // 100
function test() {
console.log(j);
}
// `~` 将函数提升为表达式
var j = 100;
~(function test() {
console.log(j);
})();
// 变量声明会前置
var j = 100;
function test() {
console.log(j); // undefined
var j;
}
test();
# 闭包:拿到不该拿到的对象
function test() {
var k = 100;
return function () {
return k;
};
}
var kk = test()();
console.log(kk);
kk = null; // 内存泄露 置空
# this
this.a = 1000;
function A() {
this.a = 1;
}
A.prototype.a = 10;
A.prototype.geta = function () {
return this.a;
};
var p = new A();
// p 是A的实例化,指向 A
console.log(p.geta());