《你不知道的JS》第二版上卷第三章笔记
- 全局作用域:定义在函数外部的变量,函数内部可以调用
- 局部作用域:定义在函数内部的变量,函数外部不可以调用
- 块级作用域:(如同下面这个例子)
for(var i=1; i<10; i++) {
var b =100;
console.log(i);
}
console.log(i,b); //输出的还是:10 100!!!
//说明js没有块级作用域
当我们需要在立即执行一个函数,又不想暴露函数内部的变量,如何解决这个问题?
方法一:使用立即执行函数(IIFE)
var a = 2;
(function foo(){
var a = 3;
console.log(a);
})();
console.log(a); //undefined
//第二个参数的意义:作为变量传入到函数中
(function foo(global){
var c = 3;
console.log(global);
})(window);
//立即函数定义的c在外面被屏蔽
// console.log(c);
方法二:ES6定义的let
let定义的变量隐式地锁在了任意的作用域中
//上面的例子中,暴露在全局的for循环,当使用let去定义i,在外部就访问不到i了
{
let k =12;
}
// console.log(k); 输出为undefined
补充:ES6中 const 定义常量 既然是常量了,就没有更改的余地