alert(a); //undefined
var a=1;
function fn1(){alert(2);}
浏览器执行步骤:找到 script后利用 “js解析器”
1)“找一些东西”:var function 参数 (js的预解析)
通过var 找到了变量a,先不管=后面的内容,a=未定义,所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
fn1= function fn1(){alert(2);}
所有的函数,在正式运行代码之前,都是整个函数块
2)逐行解读代码:
表达式:通过赋值或者加减乘除取余等可以改变值的操作
alert(a);//预解析时,遇到变量和函数只留下函数,因为变量没有值,遇到有值的时,根据优先级留下后者。function a(){alert(4);}
var a=1;
alert(a); //1
function a(){alert(2);} //没有发生调用,只是个函数声明,不会改a的值
alert(a); ⭐//1
var a=3;
alert(a); //3
function a(){alert(4);}
alert(a); ⭐//3
a();//报错,错误内容是:a is not a function,此时的a已经被3取代,3();不是一个函数。
-
script中是全局变量、全局函数,当