美文网首页
【JavaScript】变量提升以及var对变量提升的影响

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

作者: reco_luan | 来源:发表于2018-02-04 15:59 被阅读0次

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中定义变量有两种情况:

  1. 用var声明。在方法内则是局部变量,在方法外则是全局变量 ;
  2. 不用var声明。在方法内不用var声明则是全局变量(在执行当前方法之后),在方法外不加var是不能定义变量的,出现xx is not defined。

变量提升案例

案例1

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(由于test1函数里面定义了变量a)
    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_1 () {
    console.log(a) // 报错(Uncaught ReferenceError: a is not defined),阻断以下代码的运行

    a = 'I\'m a in test3'
    console.log(a) // 不输出
}
console.log(a)
test3_1()

console.log(a) // 不输出
function test3_2 () {
    a = 'I\'m a in test3' // 全局变量(但是在方法执行后生效)
    console.log(a) // I'm a in test3
}

// console.log(a) // 如果在方法执行前打印,还是会报错(Uncaught ReferenceError: a is not defined),阻断以下代码的运行

test3_2()

console.log(a) // I'm a in test3(本来没有全局变量a,当test3运行时,定义了一个全局变量a,所以这里会输出)

个人博客:午后南杂

相关文章

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

    JavaScript中变量的提升,往往会影响到我们对变量的正常获取,所以特写此文,以便以后翻阅。 什么是变量提升 ...

  • 作用域

    变量声明提升 在 JavaScript 中,函数声明(function aa(){})与变量声明(var)经常被 ...

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • 变量声明 var、let、const

    1. var变量声明提升 var声明的变量,发生变量声明提升;即:变量的声明被提升到该作用域的顶部 let 和 c...

  • ECMAScript 6 一问三不知

    let var const let 块级作用域不存在变量提升(var变量提升,值为undefined,let变量必...

  • js 变量提升(2)

    ### 只对等号左边进行变量提升 /* * 变量提升 * var fn; =>只对等号左边的进行变量提升 * f...

  • 2018-11-29 js中的var(变量提升)和let

    变量提升 // 使用var声明,会出现变量提升 function foo() { ...

  • js变量提升

    变量提升: 使用var声明的变量(包括函数)其声明会被提升到方法体最顶部,而赋值不会被提升;未使用var声明的变量...

  • 执行上下文和执行上下文栈

    一、变量提升和函数提升 首先回顾一下什么是变量提升。 变量声明提升,通过var定义(声明)的变量,在定义语句之前就...

  • [深入理解ES6]块级绑定

    var声明与变量提升 变量提升(hoisting):使用var关键字声明的变量,无论声明位置在何处,都会被视为声明...

网友评论

      本文标题:【JavaScript】变量提升以及var对变量提升的影响

      本文链接:https://www.haomeiwen.com/subject/ysimzxtx.html