您的位置:首页 > 其它

const, let和var的作用域及闭包

2017-03-01 10:08 302 查看
VAR

var定义的变量最小作用域是function:

for(var i = 0; i < 5; i++) {
var x = 6;
}
console.log("for循环里的var i: " + i); //5
console.log("for循环里的var x: " + x); //6

if(true) {
var a = 1;
}
console.log("if里的var a: " + a); //1

function getDomain() {
var j = 2;
}
getDomain();
console.log("function里的var j:" + j); //undefined


let

let定义的变量作用域是 声明它的块:

如上面的 for、if、function都作为一个块:

for(let i = 0; i < 5; i++) {
let x = 6;
}
console.log("for循环里的let i: " + i); //undefined
console.log("for循环里的let x: " + x); //undefined

if(true) {
let a = 1;
}
console.log("if里的let a: " + a); //undefined

function getDomain(){
let j = 2;
}
getDomain();
console.log("function里的let j:" + j);//undefined


const

const声明时,必须给变量赋值,且声明的变量不可修改:

const b=5;
//const b;错误写法
console.log(b);
//b += 1;错误写法


声明变量时不使用var、let或const时,定义的变量是全局变量

function getDomain() {
j = 2;
}
getDomain();
console.log(j); //2


闭包

综上无论是var还是let,函数内定义的变量,函数外都是获取不到的,那如何从函数外读取函数的内部变量那?这就是大家常说的闭包了;

function getDomain(){
var j = 2;
function innerFuc(){
console.info(j);
}

return innerFuc;
}

var innerFuc = getDomain();
innerFuc();//2;


这里的innerFuc就是一个闭包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: