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

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就是一个闭包。

猜你喜欢

转载自blog.csdn.net/qq_33619285/article/details/59056742
今日推荐