Javascript Hoisting( 变量提升)
先理解Javascript Hoisting的概念。
Javascript Hoisting:In javascript, every variable declaration is hoisted to the top of its declaration context.
我的理解就是在Javascript语言中,变量的声明(注意不包含变量初始化声明var name,初始化就是赋值 name=2)会被提升(置顶)到声明所在的上下文,也就是说,在变量的作用域内,不管变量在何处声明,都会被提升到作用域的顶部,但是变量初始化的顺序不变。
var myvar = '变量值';
(function() {
console.log(myvar); // undefined
var myvar = '内部变量值';
})();
输出的的是undefined。
因为它等价于
var myvar = '变量值';
(function() {
var myvar;
console.log(myvar); // undefined
myvar = '内部变量值';
})();
在函数内把定义的变量的声明放在最开始的位置了。当时只声明没有定义,所以是undefined。
1 //测试代码----------------------
2 var myvar = '变量值';
3 (function() {
4 console.log(myvar); // ?
5 myvar = '内部变量值';
6 })();
输出的是变量值
再看两个例子
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
输出的是10.
var a = 1;
function b() {
a = 10;
alert(a)--------输出的是10
return;
function a() {}
}
b();
alert(a);-----输出的是1
输出的是1