@Dale-Lin
2019-08-12T08:26:00.000000Z
字数 773
阅读 911
JavaScript
在代码执行之前,解析器会读取并将 函数声明 添加到当前作用域顶端:
alert(sum(10,10));
function sum(num1,num2){
return sun1+sum2;
}
这段代码可以正常运行。
alert(sum(10,10));
var sum = function(num1,num2){
return sum1+sm2;
};
这段代码不能正常运行,因为 sum
不是通过 函数声明 形式来定义的,而是通过 函数表达式 来声明的,这样将不会被提升。(函数位于一个初始化语句中)
事实上这段代码等价于:
var sum;
alert(sum(10,10));
sum = function(num1,num2){
return num1+num2;
};
可以看到 sum
的声明被提升了,但并未储存后面的函数。
如上节的第三段代码,在执行代码之前,解析器会把变量提升到当前作用域的顶端:
a = 2;
var a;
document.write(a); //2
这段代码中a在被赋值时看似未声明,会出现 undefine
,但其实解析器在执行赋值之前就把第二行中a的声明提前了,即等价于:
var a;
a = 2;
document.write(a);
对于代码:
var a = 2;
解析器读取时会把它当成两部分:
var a;
a = 2;
而其中对于 a
的声明将被提升到作用域顶端。
function getValue(condition){
if (condition){
var value = 'blue';
} else {
return null;
}
return value;
}
该例中,无论是否有condition = true,value都会被声明。因为ES5没有块级作用域。