1. 调用在最下面
function add() {
console.info(a, b, c);// 1 2 9
}
var a = 1, b = 2, c = 9;
add();
2. 调用在最上面
add();
function add() {
console.info(a, b, c);//undefined undefined undefined
}
var a = 1, b = 2, c = 9;
3. 调用在中间
function add() {
console.info(a, b, c);//undefined undefined undefined
}
add();
var a = 1, b = 2, c = 9;
第一段代码按照Java的语法,应该是变量在申明在前面,后面的函数才能拿到值的,如果按照JavaScript变量提升的话,第一段代码拿到的也应该是undefined。
这边的执行结果不是很理解,词法作用域和变量提升的理不清!
Hoisting
函数在js中是个很不一样的存在,函数分为定义与执行,定义的时候有一个作用域,执行的时候又在一个作用域,你这里的第一段函数,执行在全局环境里,函数里找不到对应的值,就会在全局里找啊,全局里有,自然不会是
undefined
。算了,给你分解一下吧,上边的代码执行是这样的:
这回总该明白了吧?