Javascript 函数和变量提拔

变量提拔和函数提拔基本上是口试必问问题
//先从一个口试题提及
        console.log(a)
        if (a) {
            var a = 1;
            console.log(a)
        }

        function a() {
            console.log(this);
        }
        console.log(a);

        a()
        

下面我们针对这个栗子剖析一下

我们晓得变量和很熟定义都邑提拔到作用域最前边

唯一须要确认的是变量和函数的先后递次

我们料想 函数是用第一国民会不会提拔到最前边呢?

//如果是剖析完递次是如许的
        function a() {
            console.log(this);
        }
        var a;
        console.log(a)
        if (a) {
            a = 1;
            console.log(a)
        }
        console.log(a);

        a()

根据我们料想的剖析效果应该是

// undefined
// undefined
// 报错

来由 函数在上var鄙人,第一个console时a未赋值,其效果是undefined,if为false 只剩末了一个console也是undefined 末了a is not a function.

不过效果是
《Javascript 函数和变量提拔》

我机灵的以为 料想错了?

//再次测试
        var a;
        function a() {
            console.log(this);
        }
        console.log(a)
        if (a) {
            a = 1;
            console.log(a)
        }
        console.log(a);

        a()

如许?对照一下效果
人工剖析效果 :
1、a()
2、1
3、1
4、a() 报错

浏览器实行效果:
《Javascript 函数和变量提拔》
没缺点!

看到这里统统圆满,不过我照样从新搜刮了一些高质量文章,发明我错了,虽然实行效果是对的,不过浏览器和人工剖析照样不一样的,和我们最最先料想的一样,函数优先。

既然题目说到了 变量 和 函数,我们就一块来说说

//简朴的栗子
function a(){ console.log(a) }
console.log(a)
var a = 1
a()

起首上边已说到我们料想和以为的是错的。

准确剖析递次是如许的

function a(){ console.log(a) }
var a;
console.log(a)
a = 1
a()

然则,这个然则很主要浏览器实行效果是:
《Javascript 函数和变量提拔》
why?这就要讲讲我所相识到的道理。

同名变量和函数,函数会提拔到最前边,变量其次,为何不那为何效果不是我们人工实行的undefined呢?原因是 变量会被疏忽,是的是疏忽。。。

function a(){ console.log(a) }
var a;//疏忽
console.log(a) //打印函数自身
a = 1
a()// a is not a function

圆满!

另有呢?是的另有同名变量是如何的递次,同名函数是如何的递次。

同名变量
console.log(a)
var a = 1
console.log(a)
var a = 2
console.log(a)

//剖析完递次是如许的

var a;
var a; //疏忽
console.log(a) // undfined
a = 1
console.log(a) //1
a = 2
console.log(a)//2

*同名变量,声明会被提拔,后边会疏忽。

同名函数
function a(){console.log(1)}
console.log(a)
function a(){console.log(2)}
console.log(a)
a()

//剖析完
function a(){console.log(1)}
function a(){console.log(2)}
console.log(a)
console.log(a)
a()

实行效果
《Javascript 函数和变量提拔》

我想你已猜到了,同名函数会被掩盖。

终究完了!

您的点赞是我继续下去的动力,感谢!

    原文作者:我是一个前端
    原文地址: https://segmentfault.com/a/1190000017805834
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞