变量提升
console.log(a); var a = 2; //把此行注释掉会报错,不注释就显示undefined //变量提升:在代码执行之前变量已经被声明了
js代码的运行阶段:
1.解析(编译)阶段:语法检查,变量及函数进行申明
2.运行阶段:变量的赋值,代码流程的执行
所以上面那个代码其实是这样的:
var a; console.log(); a = 2; //此情况称之为变量提升
全局变量与局部变量
function f1(){ var a = 2; } var f2 = function(){ var a = 1; } console.log(a); //undefined var a = 2; f2();
作用域和代码执行
如果函数名和变量名重名时,函数声明会替换掉变量声明
作用域链
var a = 3; function f1(){ var a = 6; function f2(){ var a = 5; function f3(){ var a = 4; //当函数中使用某个变量时,优先在自己的作用域中查找 //如果查找不到,就会向上一层作用域查找\ //如果找不到就继续往上一层查找,直到全局作用域, //如果还是找不到就直接报错,这就是作用域链 console.log(a); } f3(); } f2(); } f1();
浙公网安备 33010602011771号