函数和作用域

2017-09-20  本文已影响0人  向前冲冲的蜗牛

1.函数声明和函数表达式有什么区别

函数声明是使用function来进行声明的,可以不用在意调用函数的前后位置,是因为函数声明会前置。

而函数表达式是则是通过”=“(赋值)来声明函数,函数表达式必须放在调用函数之前。因为函数表达式是将变量提升,而不是将函数前置,而此时的变量是undefined。所以函数表达式必须在调用函数之前。

2.什么是变量的声明前置?什么是函数的声明前置

声明前置 会都会提升到当前作用域的顶部

var 声明的变量会前置,而function定义的函数,则会将函数的声明前置。

例如

变量的声明前置 函数的申明前置

3.arguments 是什么

arguments shi类数组的对象,用来显示所有传入函数的参数。

4.函数的"重载"怎样实现

在java或c等语言中,重载是函数名相同,而参数类型不同,从而满足相同函数不同参数对不同功能的实现。但是在js中,相同的函数会出现覆盖的问题,要实现重载,只有在函数内部实现对不同参数类型的区分,然后实现不同区分的实现。

5.立即执行函数表达式是什么?有什么作用

立即执行函数也叫IIFE是能够立刻执行,避免了全局变量的污染,也类似的模仿出了一个块作用域,IIIFE之外的函数是无法访问IIFE函数内部的。

6.求n!,用递归来实现

7.以下代码输出什么?

getInfo("饥人谷",2,"男");输出的是

getInfo("小谷",3);输出的是

getInfo('男')输出的是:

8. 写一个函数,返回参数的平方和?

9.如下代码的输出?为什么

结果为:

因为console.log(a)在 var a=1之前,变量a提升,此时的结果为undifined.

console.log(b)是因为b没有声明,所以出现了错误。

10. 如下代码的输出?为什么

结果为:hello world

               undefined 

因为函数sayName是函数声明,函数的声明会前置

sayAge是函数表达式,是将变量前置,变量前置的结果是undefined

11. 如下代码输出什么? 写出作用域链查找过程伪代码

结果是10

12. 如下代码输出什么? 写出作用域链查找过程伪代码

结果为:30

执行bar()函数的时,内部执行foo(),先从bar的执行上下文中的活动对象中查找是否有foo,barcontext.AO中有foo,进入foo的执行上下文,发现没有x,返回bar执行上下文的活动对象中中查找到有x。所以x的值为30

13. 以下代码输出什么? 写出作用域链的查找过程伪代码

结果为30

(function(){console.log(x))()是立即执行函数表达式,会从当前的活动对象中查找x,如果没有就从bar里面找到了x,所以x为30

14以下代码输出什么? 写出作用域链查找过程伪代码

结果为:undefined ,5 ,16 ,20 ,200

上一篇 下一篇

猜你喜欢

热点阅读