函数与作用域

一、函数声明和函数表达式有什么区别

首先先来看一下什么叫函数声明和函数表达式

A[PI7XK(QK]AR0_6~21KY8V.png

上面得到的结果是 fn1 运行成功, fn2 是undefined,那么,我们现在来分析一下为什么。JS 引擎在解释 JS 语句的时候,会先把变量声明和函数声明前置。变量声明前置是先定义变量,而函数声明前置是把整个函数提升到最前,而函数表达式和变量声明没区别。

二、什么是变量的声明前置?什么是函数的声明前置

JS 引擎在解释 JS 语句的时候,会先把变量声明和函数声明前置。变量声明前置是先定义变量,而函数声明前置是把整个函数提升到最前,而函数表达式和变量声明没区别。举个例子:

XVHXHBV)6A94{I@S6$(EID5.png

三、arguments 是什么

arguments是 JS 中的一个内置对象,是所有函数中可用的局部变量,里面存放着所有传进函数的参数,第一个参数键值是 "0" ,第二个是 "1" · · · 同时该对象还有length键值,所以这是一个类数组对象。直接上例子:

D10EJELH%O_VMZEGH0I5OMJ.png

test 函数输出结果

所有传进来的参数均可从这里访问,这样可以让函数处理指定一些不固定参数数量的情况,或者实现重载。

参考:arguments | MDN

四、函数的"重载"怎样实现

重载就是:函数的方法名一样,而参数表不同的函数。打个比方,在 Java 中,方法名称相同,但参数顺序、名字、类型不同,编辑器就会认为这是两个不同的方法,可以同时存在。而 JS 中,相同名称的函数会被覆盖,因为 JS 函数虽然叫函数但本质还是对象,同一个对象不会共存。那在 JS 中如何实现?

既然重载是根据参数的不同,有不同的方法,那么刚好,JS 里面就有一个内置对象叫arguments,我们可以用这个来判断一下当前所有参数的长度、类型等,做出不同的效果。

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

  1. 什么是立即执行函数?

立即执行函数(IIFE - Immediately Invoked Function Expressions)就是声明一个匿名函数,然后马上执行,通常写法是:

(function(){/* code /})()(function(){/ code */}())

还有更多其他写法,但都差不多,可以自行查找

  1. 有什么作用?

开辟独立的作用域,避免变量污染。

六、求 n!,用递归来实现

HD7H4V@LLP0%@A)LE2G@~PN.png

七、以下代码输出什么?

题目

N0KIUZKI%JIXP36LJ%PYMQM.png

八、写一个函数,返回参数的平方和?

K_XLX1MG)JH_@$ED%}39S44.png

九、如下代码的输出?为什么

题目

IO$$JV4}W%80@FI}3OJ(W$R.png

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

题目

var x = 10;
bar()
function bar(){ var x = 30;
function foo(){ console.log(x) } foo();}

结果

RG@CZ4IT0DCQ6(EWS8J3`Z9.png

参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions
http://www.jianshu.com/p/175fffba2296

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.函数声明和函数表达式有什么区别 函数就是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同...
    徐国军_plus阅读 527评论 0 0
  • 函数声明和函数表达式有什么区别 函数声明语法:function functionName(arg0,arg1,ar...
    _Dot912阅读 645评论 0 3
  • 1,函数声明和函数表达式有什么区别 1、背景介绍 定义函数的方法主要有三种: 1:函数声明(Function De...
    进击的前端_风笑影阅读 486评论 0 0
  • 函数声明和函数表达式有什么区别? 函数声明和函数表达式是EMACScript规定的两种不同的声明函数的方法。1.函...
    LeeoZz阅读 419评论 0 1
  • 声明前置和作用域也是JS 部分面试常考点 1.函数声明和函数表达式有什么区别 函数声明:使用function关键字...
    湖衣阅读 261评论 0 0

友情链接更多精彩内容