专栏首页萌兔itJavaScript入门总结第四弹——函数+十分钟了解闭包

JavaScript入门总结第四弹——函数+十分钟了解闭包

Hello~~偶又来咯,昨天有小可爱说数组有点随意,其实数组的应用的比较广泛,但是并不是很难,主要是不容易都记住,所以兔妞就是给大家将数组进行了一下梳理,总结了一下使用技巧呢~~今天是函数专题呢,也主要为大家揭秘一下闭包~

函数基础

函数定义

a) 函数声明

function myRabbit(a){

return 2*a;

}

b) 函数表达式

var myRabbit = function (a){

return 2*a;

}

c) 构造函数

var myRabbit = new Function ("a", "b", "return a * b");

var rabbit = myRabbit(1, 2);

小贴士

函数提升

提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。

提升(Hoisting)应用在变量的声明与函数的声明。

不只是变量会提升,函数也会提升,因此函数可以在声明之前使用。

函数参数

函数参数分为显式参数(Parameters)与隐式参数(Arguments)

‍‍

小贴士

参数规则

JavaScript 函数定义显式参数时没有指定数据类型。

JavaScript 函数对隐式参数没有进行类型检测。

JavaScript 函数对隐式参数的个数没有进行检测。

JavaScript函数有一个叫做arguments的对象,包含调用的参数数组,如下

x = rabbitFamily(1, 2, 5, 2, 4, 8); function ageSum() { var i, sum = 0;

for (i = 0; i < arguments.length; i++) { sum += arguments[i];

} return sum;

}

函数调用

a) 作为函数调用:funcName + ()

function myRabbit(a, b) { return a * b;

}

myRabbit(10, 2);

b) 作为方法调用

var myGirlfriend = { firstName:"Jane",

lastName: "Miller",

fullName: function () { return this.firstName + " " + this.lastName;

}

}

myGirlfriend.fullName();

c) 作为函数方法调用:通过call(), apply()来调用函数,两个方法的第一个参数必须是对象本身。

function myRabbit(a, b) { return a * b;

}

myRabbit = myRabbit.call(myRabbit, 10, 2);

d) 使用构造函数调用:创建一个新的对象,并继承构造函数的属性和方法

function myGirlfriend(arg1, arg2) { this.firstName = arg1;

this.lastName = arg2;

}

var x = new myGirlfriend("Jane","Miller");

x.firstName;

e) 自调用

(function () {

var x = "萌兔it!!";

})();

十分钟了解闭包

终于到这里了,闭包是JS学习中的难点之一,面试的时候也是面试官从来不会放过的一个考点,因为我们在工作过程中,真的会经常面对闭包。

a) 变量作用域

作为闭包的先导知识,兔妞首先在这里现为大家介绍一下JS的变量作用域。变量作用域包括全局变量和局部变量。全局变量是指声明在函数外部的变量,如果在函数内声明没有加var则也是全局变量,而局部变量则是声明在函数内部的变量。

b) 闭包

我们访问变量的时候,从内部向外部逐层访问,对于父级作用域的变量,子作用域全部能够访问,这就是链式作用域。

而我们想从外部作用域访问内部作用域的变量呢,只能通过将内部函数作为返回值返回来获取,而这就是闭包。闭包就是能够读取其他函数内部变量的函数,函数没有被释放,整条作用域链上的局部变量都将得到保留。(说白了就是一个函数套一个,里面的函数作为外面函数的返回值返回)

闭包demo:

function f1(){

  var n = 1;

  nAdd = function(){

    n += 1;

  }

  function f2(){

    console.log(n);

  }

  return f2;

}

c) 闭包的用途

读取函数内部的变量

让变量的值始终保持在内存中

d) 闭包的特点

闭包会让变量都被保存在内存中,内存消耗很大,可能导致内存泄露。解决方法:在退出函数之前,将不使用的局部变量全部删除。

闭包会在父函数外部,改变父函数内部变量的值。

好了,今天的内容就是这些了,不知道大家有没有理解什么是闭包呢~~喜欢兔妞的文章,就请点击好看让更多人看到吧,么么哒~~

本文分享自微信公众号 - 萌兔it(mengtu_it)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript第十九弹——ES6(8)Generator

    Generator与Promise相同,都是ES6异步编程的解决方案。其实Generator就可以看做一个函数,返回的是一个遍历器对象,而这个返回的遍历器对象可...

    萌兔IT
  • CSS入门总结(下)

    记得昨天的文章学到了什么吗,让我来帮大家回忆一下吧~经过昨天的学习,我们学会了如何创建CSS,学习了选择器的使用以及选择器的权重并且学习了怎样为选择器添加属性声...

    萌兔IT
  • Web开发前端调试小技巧——Chrome控制台

    Hello大家好,兔妞总觉得写代码很重要,调试也很重要,特别是前端,不光要看日志,还要调整样式,浏览器兔妞最喜欢用Chrome了,所以今天就为大家带来Chrom...

    萌兔IT
  • JavaScript闭包原理与用法实例

    (1)变量的作用域 不带有关键字var的变量会成为全局变量; 在函数中使用关键字var声明的变量是局部变量。 局部变量只有在函数内部才能访问到,在函数外面是访问...

    Javanx
  • JavaScript闭包

    函数和对其词法环境lexical environment的引用捆绑在一起构成闭包,也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函...

    WindrunnerMax
  • JavaScript作用域闭包(你不知道的JavaScript)

    JavaScript闭包,是JS开发工程师必须深入了解的知识。3月份自己曾撰写博客《JavaScript闭包》,博客中只是简单阐述了闭包的工作过程和列举了几个示...

    奋飛
  • 网页中Office和pdf相关文件导出

    最近被派去维护和开发一些做了一半、年久失修的项目。有一部分内容是关于word文件导出,顺带着把excel、pdf文件的导出也调研下吧,我想未来开发我应该会遇到的...

    璀错
  • 献给前端求职路上的你们(下)

    真正面试中,面试官往往采用的是由难到易的套路,那js和jQuery就是重中之重了,以及针对项目和所用技术方面的一些问题也就是你的必备储粮啦! JavaScrip...

    用户1667431
  • JS执行上下文/作用域/闭包

    2)一般来说内部能访问外部,外部不能访问内部。 那么怎么让外部也能访问内部? —— return

    杨肆月
  • 小米MIX2正式发布——正面几乎全是屏幕

    神无月

扫码关注云+社区

领取腾讯云代金券