美文网首页
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 混杂点-变量声明,提升与闭包

    一 变量声明 js定义变量大家都知道是用var,这个var如果在全局,他可有可无,但是如果在函数内部那么就有点不一...

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

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

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • 变量声明与闭包

    变量声明 var let const 闭包 子作用域被返回到父作用域,就会形成闭包,例子: 注意一个例子: 更多例...

  • JS闭包问题(二)

    在之前的JS闭包问题(一)文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包...

  • 你不懂JS:作用域与闭包

    你不懂JS:作用域与闭包 第四章:提升 至此,你应当对作用域的想法,以及变量如何根据它们被声明的方式和位置附着在不...

  • ES6之 let,const

    var 声明与变量提升 var是js的变量声明语句,使用var声明的变量,无论其声明的实际语句在何处,都会被提升到...

  • 闭包的形成,弊端

    闭包的形成与变量的作用域以及变量的生存周期有密切的关系关于变量及变量声明周期 链接 闭包的形成 Javascrip...

  • 闭包现象

    一、什么是闭包?声明一个变量,声明一个函数,在函数内部访问外部的变量,那么这个函数加这个变量叫做闭包。 二、闭包有...

  • js变量声明提升与函数表达式

    1.变量声明提升 js引擎会把变量声明与函数声明都提升到当前函数的顶部。eg: js引擎编译为 2.函数表达式 对...

网友评论

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

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