JS高级程序设计笔记(六)- 函数

来源:互联网 发布:制作课程表的软件 编辑:程序博客网 时间:2024/06/07 11:06

声明提升

使用function 进行声明的函数具有声明提升的特性,因此可以在进行函数声明之前调用。但是通过var func = function(){} 这样的函数表达式声明的方法,则不可以。调用时会返回undefined

闭包

首先来看看当调用一个函数时发生了什么。
当调用一个函数时,会创建一个执行环境和作用域链(作用域链赋值给执行环境内部的[scope]属性)。之后,thisarguments 和命名参数会初始化该函数的活动对象。每个执行环境都有一个保存变量的对象称之为变量对象。函数的变量对象又叫活动对象。
例如compare函数:


这里写图片描述

当在一个函数中返回一个匿名函数,则该匿名函数的作用域链中包含外部函数的活动对象。因此,在函数外部仍能通过返回的闭包访问到该函数内部声明的变量和方法。除非当闭包被销毁。可以看出闭包会占用比较多的内存,因此要谨慎使用。
闭包有一个作用就是向函数外部提供了访问局部变量的接口。可以防止过多的全局变量和随意更改变量。

私有变量

构建私有变量和方法有以下几种方式:

  • 通过构造函数
function Func() {    //私有变量和方法    var privateVar = XXX;    function privateFunc(){...}    ...    //特权方法    this.publicMethod = function(){  //闭包        //deal with privateVar&method    };}

该方式的缺点是每生成一个实例就要重新创建一遍方法。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 艾溪湖1号业主怎么办 百益健身怎么办卡 如果涂色没有画笔怎么办 打混凝土下雨了怎么办 下雨跑马拉松怎么办 儿童坐飞机忘带证件怎么办 我飞机油油超标怎么办 飞机超规格行李怎么办 打蜡后下雨了怎么办 飞机起飞耳朵不舒服怎么办 宝宝脸上口水疹怎么办 婴儿身上长癣怎么办 婴儿下巴口水藓怎么办 婴儿嘴边长癣怎么办 婴儿脸上口水癣怎么办 嘴巴旁边长癣怎么办 美团机票不出票怎么办 东方航空会员锁定怎么办 大众车烧机油怎么办 大众cc烧机油怎么办 叫外卖给差评被打怎么办 发现宿舍被盗后怎么办 知了猴变黑了怎么办 婴儿仙人掌的刺怎么办 仙人掌刺扎进皮肤里怎么办 被仙人掌的小细绒刺扎到怎么办 值机截止了怎么办 社保卡消磁了怎么办 住宾馆没身份证怎么办 社保卡电话错误怎么办 没住过酒店怎么办 上海合规网约车证件怎么办 取票没有身份证怎么办 买车票没有身份证怎么办 登机身份证丢了怎么办 飞机没带身份证怎么办 上飞机没带身份证怎么办 机场没带身份证怎么办 儿童坐飞机没有户口本怎么办 不需要行李托运化妆品怎么办 坐飞机被限制了怎么办