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
网友评论