一、变量的提升
1、使用var 关键字声明的变量会提升到代码的头部 变量提升 例子: console.log(num);//undefined var num = 100; console.log(num);//100 var x; console.log(x);//undefined 2、不使用var关键字声明的变量是全局变量 对 注意使用环境:如果声明在函数内部,则函数执行后才可以调用 否则,报错。 例子: function getValue(){ var num = 100; x = 200;//全局变量 } getValue(); // console.log(num); console.log(x);
二、函数名的提升:使用function声明的函数会提前到代码的头部
1、function 函数名(){} showMessage(); function showMessage(){ console.log('呵呵');//呵呵 } 2、var 标识符 = function(){} var func1 = function () { console.log('呵呵呵');//呵呵呵 }; func1(); 3、var func3 = new Function(形参1,形参2...,函数体) func2(); var func2 = new Function('console.log("呵呵呵呵")');//TypeError: func2 is not a function
三、函数和变量结合的提升
1、使用var关键字声明的变量会提升到 当前作用域的头部 2、变量查找值的过程: ①首先在当前变量所在作用域查找; 没有找到,去上一层作用域查找; 还没有找到,再去上一层查找; 直到找到全局作用域。 ②在任何一层找到该数据 则立即返回值; ③如果一直找到全局作用域 还没有发现该值 那么 如果变量没有声明过 报错 XX is not defined 如果变量声明过 undefined ④一般把此变量的查找过程称为 作用域链 */ console.log(c); var c = 200; var num = 100; function showValue() { //var num; console.log('showValue', num);//100 undefined // var num = 200; function show1() { //var num console.log('show1', XX);//200 100 undefined var num = 100; } show1(); } showValue();