javascript - 访问 if 块中的变量
var func = function () {
var i: number = 0;
if (i == 0) {
var y: number = 1;
}
document.body.innerHTML = y.toString(); // js/ts should complain me in this line
};
func(); // output: 1
如您所见,我在 if 块中声明了变量 y。所以,我认为它不能在作用域外被引用。
但是,当我尝试运行代码时,输出是 1。
这是 TypeScript/JavaScript 中的问题吗?
答案#1
JavaScript 中的变量会被提升,这意味着 var y 会被移动到函数的顶部,就好像它在那里被声明一样。
然而,初始化不会被提升,所以如果你将 i 改为除 0 之外的值,变量 y 仍然会存在,但它的值将是 undefined。
这意味着该函数完全等同于:
var func = function () {
var i: number = 0;
var y: number;
if (i == 0) {
y = 1;
}
document.body.innerHTML = y.toString(); // js/ts should complain me in this line
};
要得到你期望的行为,你需要使用 let,它是 ECMAScript 2015(ES6)的一部分。它是块级作用域的,正如你所期望的。它还会有效地工作,使其只能从定义点开始访问,这可能也是你所期望的。
答案#2
如果你重新声明一个 JavaScript 变量,它不会丢失其值。
第二个参考可能为新的变量语法铺平道路。实际上,如果你记得,javascript 中变量声明并不是必要的。简单
y=1;
也可以。
在我看来,当你第二次在 if 块之外引用 y 时,它会尝试重新声明并保留旧值。
参考 - http://www.w3schools.com/js/js_variables.asp & http://www.w3schools.com/js/js_scope.asp
