在线咨询
QQ咨询
服务热线
服务热线:13125520620
TOP

【JavaScript】变量提升以及var对变量提升的

发布时间:2018-2-5 浏览:2970

什么是变量提升
 
//变量声明提升
function test() {
    var a = "1";
    var f = function(){};
    var b = "2";
    var c = "3";
}
 
//上述代码等价于
function test() {
    var a,f,b,c;
    a = "1";
    f = function(){};
    b = "2";
    c = "3";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
js中定义变量有两种情况:(注意在方法外不加var是不能定义变量的,出现xx is not defined) 
1. 都加var,在方法内则是局部变量,在方法外则是全局变量。 
2. 在方法内,加var为局部变量,不加var则是全局变量(在执行当前方法之后)
变量提升案例
 
案例1
 
由于test1函数里面定义了变量a,由于
 
var a = 'I\'m a in all'
 
function test1 () {
    console.log(a)
    console.log(window.a)
 
    var a = 'I\'m a in test1'
    console.log(a)
}
 
test1()
1
2
3
4
5
6
7
8
9
10
11
上述代码相当于
 
var a = 'I\'m a in all'
 
function test1 () {
    var a
    console.log(a) // undefined
    console.log(window.a) // I'm a in all(因为window指的是全局环境)
 
    a = 'I\'m a in test1'
    console.log(a) // I'm a in test1
}
 
test1()
1
2
3
4
5
6
7
8
9
10
11
12
案例2
 
var a = 'I\'m a in all'
 
function test2 () {
    console.log(a) // I'm a in all
 
    a = 'I\'m a in test2' // 这里本来就是赋值,所以上边的a会输出全局变量
    console.log(a) // I'm a in test2
}
 
test2()
1
2
3
4
5
6
7
8
9
10
案例3
 
function test3 () {
    console.log(a) // 报错(Uncaught ReferenceError: a is not defined)
 
    a = 'I\'m a in test3' // 这里本来就是赋值,所以上边的a会输出全局变量
    console.log(a) // I'm a in test3
}
 
test3()
 
console.log(2) // I'm a in test3(本来没有全局变量a,当test3运行时,定义了一个全局变量a,所以这里会输出)

TAG
软件定制,软件开发,瀚森HANSEN
0
该内容对我有帮助