码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-04 18:09:41      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:lock   两种   报错   asc   source   java   window   javascrip   enc   

JavaScript声明过的变量提升往往会影响到我们对变量的正常获取,所以特写此文,以便以后翻阅。

什么是变量提升

//变量声明提升
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";
}

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()

上述代码相当于

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()

案例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()

案例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,所以这里会输出)

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

标签:lock   两种   报错   asc   source   java   window   javascrip   enc   

原文地址:https://www.cnblogs.com/luanhewei/p/8413435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!