美文网首页
Javascript变量提升和函数提升

Javascript变量提升和函数提升

作者: 肆意咯咯咯 | 来源:发表于2018-04-03 18:29 被阅读0次

Javascript引擎的工作方式是:先解析代码,获取所有被声明的变量,然后再一行一行的运行。

一.变量提升
在Es6之前,JavaScript没有块级作用域,只有全局作用域和函数作用域,变量提升即将变量声明提升到它所在作用域的最开始的部分。
首先举一个简单的例子:
console.log(b);//undefined
var b =1;
console.log(b);//1

首先使用console.log方法在控制台显示变量b。这个时候变量B还没有声明和赋值,但不会报错,因为存在变量提升,先将变量B的声明提升到了最开始的地方;

var b;
console.log(b);//undefined
b =1;
console.log(b);//1
举例二:
var a = 5;
            function foo(){
                a = 2;
                console.log(a);
                var a;
            }
            foo();//2

在函数内解析编译时,“var a”因为变量提升被提前了,所以我们看到的是内部变量a,而不是外面已经赋值的外部变量5;

举例三:
var a=5;
            function foo(){
                console.log(a);
                var a = 2;
            }
            foo();//undefined
二.函数提升
js创建函数存在两种方式:函数声明和函数表达式,只有函数声明存在函数提升;
//函数声明
function myTest(){
                foo();
                function foo(){
                    alert("我来自foo");
                }
            }
            myTest();//我来自foo
//函数表达式
function myTest(){
                foo();
                var foo = function(){
                    alert("我来自foo");
                }
            }
            myTest();//TypeError:foo is not a function;

总结:关于变量提升和函数提升的问题大概就这些,可以多做一些练习;

(function() {  
                console.log(a);    //undefined  
                a = 'aaa';  
                var a = 'bbb';  
                console.log(a);    //'bbb'
            })();
console.log(f1()); //undefined
            console.log(f2);   //undefined
            function f1() {console.log('aa')}  //aa
            var f2 = function() {}

相关文章

  • 变量提升 & this指向

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

  • var与let、const的区别

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

  • js的提升

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

  • runoob js第六天

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

  • Javascript变量提升和函数提升

    Javascript引擎的工作方式是:先解析代码,获取所有被声明的变量,然后再一行一行的运行。 一.变量提升 在E...

  • JavaScript 变量提升和函数提升

    一、变量提升 在ES6之前,JavaScript没有块级作用域,只有全局作用域和函数作用域。 1.所指的形式:必须...

  • 2019-11-11-本周学习周报

    学习总览 JavaScript 函数作用域、块级作用域 变量提升、函数提升 CSS 新增属性transition ...

  • JavaScript 坑与技巧:变量作用域

    变量作用域 变量提升 JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”...

  • 变量作用域与解构赋值

    变量提升 JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:...

  • JavaScript变量、函数和变量提升

    一.变量的作用域 变量分为全局变量和局部变量 全局变量: 局部变量:

网友评论

      本文标题:Javascript变量提升和函数提升

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