美文网首页
javascript学习笔记-函数声明提升和变量声明提升

javascript学习笔记-函数声明提升和变量声明提升

作者: 持续5年输出bug | 来源:发表于2018-09-28 01:12 被阅读0次

1.变量提升:

使用var 关键字声明的变量都存在变量提升,以下代码中,虽然在没有声明变量a之前就调用了a,但是却没有报错,打印出undefined,是因为用var声明的变量会存在变量提升

console.log(a);
var  a=10;

根据变量提升原理,以上等价于

var a;
console.log(a);
a=10;

由以上可以明确看出,变量a被声明,只是没有被赋值,所以不会报错。

2.函数声明提升

创建函数的两种方式:
函数表达式方式:

var a =function(){

}
a();

函数表达式方式其实就是变量声名的一种,所以以上代码块也可这样写:
var a;
a=function(){

}
a();

函数声明方式:

function a(){

}
a();

当使用声明方式创建一个函数的时候,存在函数声明提升如:

    a();
    function a(){
        alert("你好!");
    }

该代码块将弹出 alert,这是因为在函数被以这种方式创建的时候,函数声明提升的原因,函数在页面打开时就已经被创建好了;

如果使用表达式的方式创建函数:

var a =function () {
  alert("holl");
}
a();

正常执行,弹出ho l l,但是不会再存在函数声明提升,执行以下代码后控制台直接报错:a is not a function。

a();
var a =function () {
alert("holl");
}

网上另外一个函数声明提升的例子

console.log(a); //undefined
if (false) {
function a() {
    console.log(100);
  }
}
a(); //TypeError: a is not a function 理论上应该是100

函数提升发生在所有代码执行之前,所以尽管a函数的定义过程写在了if分支中,但是理论上,它是不会影响函数声明提升的

在新版本的浏览器中会出现此问题,旧版本的浏览器中会在控制台中打印出100

这也提醒了我们尽量不要在控制语句中进行声明,会造成很多无法预知的bug

相关文章

  • javascript学习笔记-函数声明提升和变量声明提升

    1.变量提升: 使用var 关键字声明的变量都存在变量提升,以下代码中,虽然在没有声明变量a之前就调用了a,但是却...

  • js的提升

    JavaScript 会将函数声明和变量声明提升到当前作用域的顶部。变量赋值不会提升。在脚本的顶部声明函数和变量,...

  • runoob js第六天

    JavaScript 变量提升 变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。变量可...

  • 作用域

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

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • JS 函数声明和函数表达式的区别

    函数声明和函数表达式的区别优先级JavaScript的变量声明提升机制-即可以先使用,后声明函数声明会被提升到作用...

  • 变量提升 & this指向

    变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在...

  • var与let、const的区别

    什么是变量提升?JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量...

  • 2019-05-11

    JavaScript 预编译:函数声明提升,变量声明提升 2018年06月21日 20:45:17 __Amy 阅...

  • JavaScript 变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明...

网友评论

      本文标题:javascript学习笔记-函数声明提升和变量声明提升

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