美文网首页
js 混杂点-变量声明,提升与闭包

js 混杂点-变量声明,提升与闭包

作者: PoWerfulHeart | 来源:发表于2017-07-21 15:48 被阅读34次

    一 变量声明

    js定义变量大家都知道是用var,这个var如果在全局,他可有可无,但是如果在函数内部那么就有点不一样了。当然最近看了看es6,里面有很多新语法挺好用的,其中就有一个叫let的定义变量方式,这个就只是拿来定义局部变量的,这里不展开。

    言归正传,有如下语句:

    请问在console中会打印出什么?答案是一个undefined!!!

    我们改一下:

    改成这样的话,它会给你一个123.

    这其实就是var在作怪,js里,如果在函数内部定义变量必须加var,不然定义的是全局变量,就像我们改过的语句,在函数里声明了一个全局变量,然后给全局变量赋值,在外部自然而然就能得到这个值。

    二 变量,函数声明提升

    变量及函数的声明都将被提升到最顶部

    即:

    相当于:

    变量x的声明被提升到了 最顶部,同理函数的提升(仅限于以声明的形式创建的函数,字面量式不会提升),这也就是你写的函数function xx(){}放在js的任何地方都可以调用,因为它被提升了。

    三 闭包

    这里顺便提一下闭包,因为和这个东东很像:

    在说var定义变量的第一个例子上我们为什么得到的n不是123,而是undefined?,这就是因为js的链式作用的原因,外部的变量对内部可见,反之不通。当然第二个例子我们将其定义为全局的,那就不存在这些问题了。

    如图:

    这里的getTest函数就称之为闭包,因为链式作用的原因,外部我们无法访问内部的变量,那么刚才说过,内部可以访问外部的,那么我们是不是在其内部定义一个函数再return出来问题就解决了呢?是的,运行一下你会得到123.

    相关文章

      网友评论

          本文标题:js 混杂点-变量声明,提升与闭包

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