10 回答
TA贡献1871条经验 获得超13个赞
function f(params){
var x;
if(params){
x = 10; //var x=10; 变量提升到最顶层
}
return x;
}
f(false);//undefined
非常感谢热心小伙伴的指点, 楼上说的变量提升就是这个意思吧 这应该就是程序走的步骤
TA贡献1850条经验 获得超11个赞
这是作用域的问题。
用了var关键字,变量作用域提升,true的时候,if外面可见x,false的时候不走这里,外面看不到。
你可以试下let或者const,即使你true,直接报错x没定义。
TA贡献1871条经验 获得超8个赞
这个问题,var是函数作用域也就是function级别。{}限制不了它的域,存在变量提示。
也就是js解释器在解释的时候第一遍会遍历function里的变量做预声明,然后再按行解析。
这道题,程序进入函数后:
先声明x,但是不赋值,为undefined
然后解析if,发现为false,那么var x = 10; 这句不执行,直接执行 return x。然后就是undefined
你可以对比下面两段代码
function f(shouldInitialize = true) {
console.log(x);
if (shouldInitialize) {
var x = 10;
}
return x;
}
f(false); // returns 'undefined'
function f(shouldInitialize = true) {
console.log(x);
if (shouldInitialize) {
let x = 10;
}
return x;
}
f(false); // let 作用域是块也就是{},解析阶段会报错
TA贡献1795条经验 获得超7个赞
该说的楼上都说了,我只是翻译一下。
function f(shouldInitialize: boolean) {
var x;//这就是所谓的声明提升
if (shouldInitialize) {
x = 10;
}
return x;
}
f(true); // returns '10'
f(false); // returns 'undefined'
TA贡献1848条经验 获得超2个赞
(1)传入参数为true时,if语句执行,存在变量提升情况。此时,f()函数如下。
function f(shouldInitialize: boolean) {
var x; //变量提升
if (shouldInitialize) {
x = 10;
}
return x;
}
f(true); // returns '10'
(2)传入参数为false时,if语句对应的赋值语句没有执行,但依旧存在var变量声明和变量提升。此时,f()函数如下。
//传入参数为false时
function f(shouldInitialize: boolean) {
var x; //变量提升
return x;
}
f(false); // returns 'undefined'
TA贡献1780条经验 获得超1个赞
添加回答
举报