function foo() {
if(true) {
var bar = 0;
}
alert(bar);
}
foo(); // shows 0
JavaScript(TypeScript)与Java不同,变量的作用域不是代码块(一段被花括号{}括起来的代码),而是函数体。
原因是在运行时,所有的变量声明都会在函数执行前移动到函数的顶端,这种行为被称为变量提升。
function foo() {
var bar;
if(true) {
bar = 0;
}
alert(bar);
}
ES6中的let和const是块作用域。
立即调用函数表达式(IIFE)是一种设计模式,使用函数作用域作为一个词法作用域。IIFE可以被用于防止全局作用域中的变量提升导致的污染(隐藏私有变量)。
JavaScript(TypeScript)与Java不同,变量的作用域不是代码块(一段被花括号{}括起来的代码),而是函数体。
原因是在运行时,所有的变量声明都会在函数执行前移动到函数的顶端,这种行为被称为变量提升。
ES6中的let和const是块作用域。
立即调用函数表达式(IIFE)是一种设计模式,使用函数作用域作为一个词法作用域。IIFE可以被用于防止全局作用域中的变量提升导致的污染(隐藏私有变量)。