资讯专栏INFORMATION COLUMN

一个考查作用域以及闭包的题目

sushi / 2943人阅读

摘要:怎么理解这句话呢也就是说一个函数离开了创建时的作用域,但是其还是会和这个作用域以及这个函数外部的作用域相关联,也就是说变量依旧是那个变量以这个题目为参照,那么结果就很明了了。

var a = 2;
var func = (function(){

var a = 3;
return function(){
    a++;
    console.log(a);
}

})();

func();
func();

1.涉及的知识点:
(1)JS变量的作用域
(2)闭包
2.变量的作用域,通俗来说就是变量所能起到作用的范围,也就是变量能被访问到的范围。
对于变量的作用域的理解,有一下几点需要了解的:
(1)变量的作用域不是“块级”,而是以“函数”为作用域

 这个所说的的“块级”,指的是距离“代码”最近的代码块。比如举个C#的例子:
        public void Param()
        {
            var a = 1;
            if(a==1){
                var b = c;
            }
        }
 变量a的作用域就是 Param()这个代码快,而变量b的作用域的作用域就是if所表示的代码块。
        
 来看个JavaScript的例子:
        function param () {
            {
                var a = "liyunhua"
            }
            console.log(a); // 输出 liyunhua
        }
        console.log(a) // error
        
  变量a在params()中都是可以被访问的,而出了param()的范围就会报错。

(2)变量的覆盖:“一个作用域中存在一个与外层作用域的同名变量,那么在内部作用域以及其内部的所有的作用域中都访问不到外面的变量”--摘自《深入理解JavaScript》

        这句话还是比较好理解的。这里就不做解释了。
    理解了上面的两点,那么在立即执行函数表达式(IIFE)中,a的初始值就是3,并且不会影响到外部作用域变量a的值。执行函数(IIFE)中,a的初始值就是3,并且不会影响到外部作用域变量a的值。
3.闭包
  闭包的东西太多,这里就以题论题,不会过多地讲述闭包的知识点。有兴趣的朋友,可以去这个链接了解 
 (https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures)。
  这里说闭包的一个作用:使函数可以维持其创建时所在作用域。
  怎么理解这句话呢?
      也就是说一个函数离开了“创建时的作用域”,但是其还是会和这个作用域以及这个函数外部的作用域相关联,也就是说“变量”依旧是那个“变量”
  以这个题目为参照,那么结果就很明了了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98470.html

相关文章

  • JS三部曲,变量提升,this与作用闭包

    摘要:这篇文章总结下之前看的文章和自己在工作中遇到的坑,纯手写的,有什么写的不对的请多多提出修正哈变量提升何为变量提升里面的变量在声明之前就可以使用,因为该声明已经被提升至该作用域函数或全局的顶部直接上代码和都会变量提升优先级上面可理解为函数这时 这篇文章总结下之前看的文章和自己在工作中遇到的坑,纯手写的,有什么写的不对的请多多提出修正哈 变量提升 何为变量提升?js里面的变量在声明之前就可...

    dongxiawu 评论0 收藏0
  • 那些年,前端学习之路疑难杂症(四):面试中遇到3个问题概览

    摘要:闭包能用来实现私有化和创建工厂函数等作用。关于闭包的常见面试题是这样的写一个函数,循环一个整数数组,延迟秒打印这个数组中每个元素的索引。 文章来源:http://mp.weixin.qq.com/s/vs0... 前言 在公众号上看到了这篇文章,觉得很有用,有助于理解JS学习中的一些重点难点。决定把它整理下发布出来。该文章主要介绍了JS中的三个问题。在以后的几篇文章里,我会详细介绍这三...

    gecko23 评论0 收藏0
  • 由两道题扩展作用,作用链,闭包,立即执行函数,匿名函数认识总结

    摘要:前言最近在学前几天看到两道题刚开始看懵懵懂懂这几天通过各种查资料慢慢的理解顿悟了对匿名函数闭包立即执行函数的理解也更深了一点在此分享给大家我的理解与总结希望能帮助大家理解因为这篇文章是我用心总结的查阅了很多的资料所以总结的比较细篇幅较长如果 前言 最近在学JS,前几天看到两道题,刚开始看懵懵懂懂,这几天通过各种查资料,慢慢的理解,顿悟了,对匿名函数,闭包,立即执行函数的理解也更深了一点...

    piapia 评论0 收藏0
  • 56 道高频 JavaScript 与 ES6+ 面试题及答案

    摘要:线程的划分尺度小于进程,使得多线程程序的并发性高。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口顺序执行序列和程序的出口。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。 showImg(https://segmentfault.com/img/bVbv2GE?w=900&h=400); 前言 本文讲解 56 道 JavaScript...

    zengdongbao 评论0 收藏0
  • js几个经典题目详解

    摘要:四这个题目比较简单即函数声明和变量声明的关系和影响,遇到同名的函数声明,不会重新定义五关于这个题目,的规范有解释的。属性的值是对象关于对象的具体定义,看这里对象六这个题目可以说是最简单的,也是最诡异的关于这个题目,我们先来了解个概念。 废话不多说,直接看题目,先不要急着看答案 先自己思考,收获更多 (长期补仓); 一 var out = 25, inner = { ...

    stormgens 评论0 收藏0

发表评论

0条评论

sushi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<