美文网首页
变量提升

变量提升

作者: haha2333 | 来源:发表于2019-07-21 17:23 被阅读0次

先来一个小小的例子吧

a = 2;
var a;
console.log(a);  //2

不是打印 undefined 而是打印 2
这是因为使用var声明的变量是全局性的,存在变量提升。那什么是变量提升呢?
js并不是严格的自上而下的语言,浏览器编译js的时候,会把用var声明的变量提到所有代码前面。然后再执行代码。

所以上面的代码就等同于

var a;
a = 2;
console.log(a);  //2

但是变量提升只提升声明,不会提升赋值。就像下面这个例子一样

console.log(a) //undefined
var a=2

因为var a=2在浏览器解析中是分成这样的两步。var a被提升了,但是a=2还在console后面

var a;
a=2

js除了变量提升,还存在函数提升
函数声明格式:

function 函数名 (参数){
  // 函数体
}

只有使用这种格式声明的函数,才会被函数提升,并且比变量提升位置更加靠前(即同名情况下,给function使用)
变量提升的基本规则:同名情况下,后面的函数声明会覆盖前面的函数声明

看下面一个例子

foo()
var foo = function () {  // 这种格式叫做函数表达式
  console.log("foo")
} //报错,foo is not a function

经过函数提升以后,上面的这段代码变成:

var foo
foo()
foo = function () {
  console.log("foo")
}

所以会报错,foo is not a function。

又一个例子

foo();
function foo() {
    console.log('foo');
}
var foo = 2;

上面的代码,最后会打印 foo。(不存在我们以为的,后声明的会覆盖前面的声明,打印出foo is not a function)

最后补充一下:

a=2
console.log(a)  // 2

可以打印a的值,这是因为不写出声明方式的话,默认是全局变量,用var声明。

相关文章

  • 浅析关于 JS 作用域的几个高频知识点

    闭包 词法作用域 变量提升 变量提升 什么是变量提升 顾名思义,变量提升指的是,在声明变量的时候,变量的声明位置会...

  • JS中的提升

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

  • 变量提升问题

    这是 变量提升问题 1. 变量提升, 很简单,就是把变量提升提到函数的top的地方。我们需要说明的是,变量提升 只...

  • JavaScript__变量声明提升(Hoisting)

    摘取:http://www.jb51.net/article/30719.htm 变量提升 变量提升就是把变量提升...

  • var,let,const 的区别

    变量提升 变量提升即将变量声明提升到它所在作用域最前面,而且仅仅是提升变量,不会提升所赋的值 执行流程 作用域 在...

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

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

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

  • 2021-04-02

    变量提升和函数提升以及他们的优先级 1,变量提升:变量提升是指将变量声明提升到它所在的作用域的最开始部分 2,函数...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • Javascript 变量执行过程 和 数组 & 对象的区别

    变量提升 JS执行过程1. 先提升(先提升函数,再提升变量,如果名字一样,变量提升会覆盖函数提升)2. 再执行,如...

网友评论

      本文标题:变量提升

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