前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript入门总结第四弹——函数+十分钟了解闭包

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

作者头像
萌兔IT
发布2019-07-25 11:39:01
3370
发布2019-07-25 11:39:01
举报
文章被收录于专栏:萌兔it萌兔it

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) 闭包的特点

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌兔it 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档