【面试题】作用域和作用域链、函数的进阶、闭包

一、作用域和作用链

1.什么是作用域?

        标识符可以访问的范围。

2.什么是标识符?

        变量名、函数名、函数的形参、对象的属性名

3.作用域分类?

        局部作用域、全局作用域、快级作用域(ES6新增的)let const 声明的变量才有快级作用域

4.作用链查找规则--就近原则

        先找到自己的作用域,如果自己没有就一层层向上找,找到直接使用。如果在window都找不到就报错

二、函数的进阶

1.函数

1.函数的作用

        提高复用率,易维护

2.函数的声明?

        函数声明式、函数表达式

3.函数的参数?

        形参,实参

4.函数命名规则?

        一般建议使用小驼峰命名规则。[潜规则]

5.函数的返回值?

        函数的计算结果,外面是否要使用。要使用就返回值。没有返回值,默认返回undefined。

6.函数不调用不执行。可以调用多次。

2.es6的默认参数【缺省参数】

function 函数名称(形参 = 默认值){...}

3.rest参数

1.arguments内置对象【了解】

        缺陷:伪数组、箭头函数没有

2.rest参数【ES6】取代arguments内置对象

        数组、所有函数都有         语法:function 函数名称(...形参) {...}

4.箭头函数---ES6语法糖,提高开发效率 

const 变量名 = () => {}

   1.语法:() => {}
   2.如果函数体只有一行代码的时候,可以省略{}、return 
   3.如果形参只有一个的时候,可以省略(),建议不要省。

5.IIFE【ES5】立即执行函数表达式【了解】 

语法结构:(function(){...})();

优势:
        1.不用调用,自己调用
        2.保护变量,防止全局污染。

 三、闭包

1.什么是闭包?

         函数内部标识符跨作用域。函数和标识符总和

2.语法结构:

1.外部函数(标识符) + 内部函数(访问标识符)

function 外部函数(){
    //标识符
    return  function 内部函数(){
        使用标识符
    }
}
变量 = 外部函数()  //变量接收的内部函数
变量()  //调用的内部函数

2.利用IIFE自己调用一次外部函数,外部函数把内部函数挂载window上

;(function(){
    标识符
    window.变量名 = function 内部函数(){
        使用标识符
    }
})();
变量名()

3.作用
        1.保护变量,防止全局污染。
        2.形成一个简单的模块化。
        3.ES6已经全部解决了闭包。闭包被ES6抛弃了。

4.缺陷?
        闭包如果过量使用,会造成内存溢出。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小彬程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值