变量提升
- demo
var v = "hello world";
(function (){
console.log(v);
var v = "hi";
})() //undefined
//相当于
var v = "hello world";
(function (){
var v;
console.log(v);
v = "hi";
})()
var
的变量提升只是定义提升至最前,变量的赋值不会提升
创建函数的有两种方式
- 函数声明
function f(){}
function test(){
foo();
function foo(){
console.log("hello");
}
}
test(); //"hello"
- 定义一个变量
var f = function (){}
function test(){
foo();
var foo = function foo(){
console.log("hello");
}
}
test(); // foo is not a function
//相当于
function test(){
var foo;
foo();
foo = function foo(){
console.log("hello");
}
}
test();
- 函数本身也是一种变量,所以也存在提升,函数声明的方式是提升了整个函数,所以可以正确执行,定义变量的方式,并没有提升整个函数,所以会报错
参考文章推荐
Javascript作用域和变量提升