下面这段代码,就是变量提升最好的例子。
为什么说是最好呢?
首先,它有关变量提升,通俗来说就是显示使用后定义。
再者,变量提升不仅有关于变量,函数也会被提升,它还涉及到变量和函数被提升的先后顺序。
现在我会为大家演示 x=5;var x; 和 var x=5;之间的区别
首先,我们要知道js中的变量提升。JavaScript 只有声明的变量会提升,初始化的不会。
这是声明,不管在你使用前还是后,它在解析时都会被放在window对象下。当检测到你赋值或使用时,自然而然不会报错。
var x;
而下面这个,叫做初始化,它不会被提升。
var x=5;
=====================分割线========================
其次,看下面这一段代码
window.onload=function(){
var x = 5; // 初始化 x
// 声明 y
y = 5;
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + typeof y; // 显示 x 和 y
// 设置 y 为 7
var y;
function y(){
return 7;
};
}
他的输出结果为 5 number,也就是说,y在这里是一个数值型变量。而在他之后声明的函数被覆盖了(js没有重载这一说)
!!!!
常识,后声明的函数应该覆盖先声明的变量。但是这里却不能用这一理论解决。
我们知道,声明的函数也会被提升,他的优先级高于变量,所以它又被变量覆盖。
小提示:赋值函数不会被提升哦,就算先复制在来一个 var 他也不会被提升。