javascript 基础 --- let 和 var(词法作用域)
2019-06-11 15:31 *奋斗* 阅读(278) 评论(0) 收藏 举报1)全局作用域下,被 let 声明的变量,不会作为全局对象 window 的属性,被 var 声明的变量,则自动为 window 对象的属性;
2)函数作用域下,两者的意义基本相同;
3)块作用域下,例如:let 在 for 循环用的话,只有 for 循环中可用;而用 var 声明变量,for 循环所在的整个函数可用;
4)var 允许在同一作用域中重复声明变量,但 let 只允许声明一次;
5)let 和 var 在指定作用域下,都会经历“变量提升”,但 var 声明的变量会默认设置为 undefined,但 let 声明的变量,并没有初始化,如果此时用到会报 ReferenceError 错误。从代码块开始到执行到let 变量初始化完毕这段时间,let 变量已经声明,但不可访问,这段时间被称为【暂存性死区】。
注意:javascript 里的函数在定义它们的作用域里运行,而不是在执行它们的作用域里运行。
var tt = 'aa';
function test() {
alert(tt);
var tt = 'dd';
alert(tt);
}
test(); // 弹出两个框:第一个 undefined,第二个 dd
var value = 1;
function foo() {
alert(value);
}
function bar() {
var value = 2;
foo();
}
bar(); //1,函数在哪里调用没有关系,变量的位置在编译的词法分析阶段就确定了。
// 当调用foo时,会对value进行一次RHS查询,
// 在当前函数作用域中没有查找到会查找到最外层的作用域,也就是全局作用域定义的value
个人统计【1】:2019-06-11
浙公网安备 33010602011771号