console.log(a); //undefined
var a;
2)
console.log(a); //undefined
var a = 10;
3)
f2(); //报错 :f2 is not a function
var f2 = function(){}; //函数表达式
4)
console.log(this); //widow
5)
console.log(f1); //function f1(){}
function f1(){} //函数声明
6)
console.log(num);//报错 num is not defined
num = 1;
从以上实例可看出 在javascript一句一句运行之前,浏览器会先把
变量
声明,而值为undefined,直到运行到变量赋值语句。与此类似的为
函数表达式
,浏览器先只是把函数声明,赋值为undefined,因而调用f2函数应该放在函数表达式的后面。
this 函数声明
浏览器先声明并将整个函数赋值
变量 | 执行上下文 |
普通变量(包括函数表达式),如: var a = 10;
|
声明(默认赋值为undefined)
|
函数声明, 如: function fn() { }
|
声明并赋值
|
this
| 声明并赋值 |
函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域,如下
二、函数声明和变量,谁先被提升
函数会首先被提升,然后才是变量
console.log(foo);
function foo(){
console.log("函数声明");
}
var foo = "变量";