const, let和var的作用域及闭包
2017-03-01 10:08
302 查看
VAR
var定义的变量最小作用域是function:
let
let定义的变量作用域是 声明它的块:
如上面的 for、if、function都作为一个块:
const
const声明时,必须给变量赋值,且声明的变量不可修改:
声明变量时不使用var、let或const时,定义的变量是全局变量
闭包
综上无论是var还是let,函数内定义的变量,函数外都是获取不到的,那如何从函数外读取函数的内部变量那?这就是大家常说的闭包了;
这里的innerFuc就是一个闭包。
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就是一个闭包。
相关文章推荐
- JS中的块级作用域,var、let、const三者的区别
- let、const、var和块级作用域
- var、let、const的区别
- js中const,var,let的区别
- 开始学习es6(二) let 与 const 及 块级作用域
- javaScript中var、let、const的区别
- JavaScript中const,var,let的区别
- 《作用域与闭包:this,var,(function () {})》
- JS中三种定义变量的方式:var, let, const
- ES6 let,const命令和块级作用域
- javascript var let const 区别
- js变量中有var定义和无var定义的区别,es6中let命令和const命令
- javascript中var与let与const的区别
- js中const,var,let区别
- Angular2入门:TypeScript的类型 - let , var, const
- JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
- js中const,var,let区别
- es5/6中变量定义(var/let/const)比较
- javascript 三种变量申明方式var、let、const
- angularJS2 变量声明 var let const