var申明的变量是有作用域的

如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量:

'use strict';

function foo() {
var x = 1;
x = x + 1;
}
x = x + 2; // ReferenceError! 无法在函数体外引用变量x
 

由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:

'use strict';

function foo() {
var x = 1;
function bar() {
var y = x + 1; // bar可以访问foo的变量x!
}
var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!
}

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:

'use strict';

function foo() {
var x = 'Hello, ' + y;
console.log(x);
var y = 'Bob';
} foo();
局部作用域

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的:

'use strict';

function foo() {
for (var i=0; i<100; i++) {
//
}
i += 100; // 仍然可以引用变量i
}
let :局部作用变量
为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量: 'use strict'; function foo() {
var sum = 0;
for (let i=0; i<100; i++) {
sum += i;
}
// SyntaxError:
i += 1;
} const:常量

常量

由于varlet申明的是变量,如果要申明一个常量,在ES6之前是不行的,我们通常用全部大写的变量来表示“这是一个常量,不要修改它的值”:

var PI = 3.14;

ES6标准引入了新的关键字const来定义常量,constlet都具有块级作用域:

'use strict';

const PI = 3.14;
PI = 3; // 某些浏览器不报错,但是无效果!
PI; // 3.14

详细请参考:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344993159773a464f34e1724700a6d5dd9e235ceb7c000

最新文章

  1. link和@import的区别
  2. opencv中的.at方法
  3. php第三方登陆
  4. VC++打开对话框选择一个文件夹路径 BROWSEINFO结构
  5. android ANR
  6. Centos 7 通过YUM安装 PHP7 NGINX1.1.8 POSTGRESQL9.5
  7. POJ 2750 Potted Flower(线段树的区间合并)
  8. 【转】在PC上测试移动端网站和模拟手机浏览器的5大方法
  9. haar_adaboost_cascade阅读资料
  10. 使用镜像仓库托管自己构建的Docker镜像
  11. 201521123038 《Java程序设计》 第九周学习总结
  12. Windows 下安装 swoole 具体步骤
  13. ●BZOJ 4407 于神之怒加强版
  14. 类似Jquery ui 标签页(Tabs)
  15. Python 爬虫 之 阅读呼叫转移(一)
  16. git如何避免push/pull时输入密码
  17. 巡风源码阅读与分析--querylogic函数
  18. spring boot + vue + element-ui全栈开发入门
  19. MT【312】特征根法求数列通项
  20. (5) 电商场景下的常见业务SQL处理

热门文章

  1. Sqoop import导入表时报错java.lang.ClassNotFoundException: org.json.JSONObject
  2. comet oj #7
  3. python基础01day
  4. C#使用SMTP协议发送验证码到QQ邮箱
  5. vue+element-ui上传图片时压缩大小
  6. python中的exec()函数和eval()函数
  7. 【Nginx】将http升级到https并且同时支持http和https两种请求
  8. Tomcat内存溢出解决方法
  9. 算法——dfs 判断是否为BST
  10. JAVA之Socket通讯