美文网首页
函数和作用域

函数和作用域

作者: 向前冲冲的蜗牛 | 来源:发表于2017-09-20 12:42 被阅读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

    相关文章

      网友评论

          本文标题:函数和作用域

          本文链接:https://www.haomeiwen.com/subject/faensxtx.html