杭州外贸网站建设公司,wordpress侧边目录,wordpress ios git,衡水网站建设套餐函数表达式是JS中一个强大的特性#xff0c;尤其是ES6支持Lamada表达式后#xff0c;更是锦上添花。在前边的文章介绍中#xff0c;曾经介绍过一种创建函数的方式#xff0c;函数声明#xff0c;对函数表达式也有简单介绍。这章将会对函数表达有更详细的介绍。 函数表达式…函数表达式是JS中一个强大的特性尤其是ES6支持Lamada表达式后更是锦上添花。在前边的文章介绍中曾经介绍过一种创建函数的方式函数声明对函数表达式也有简单介绍。这章将会对函数表达有更详细的介绍。 函数表达式最常用的定义方式为const a function(){}。其中function是一个匿名函数也可叫Lamada函数因为函数的关键字后面没有标识符也就是说函数的name属性是一个字符串。 函数表达式与函数声明除了一个有标识符和一个没有标识符之外还有一个很重要的区别那就是声明提前。所谓声明提前就是无论函数写在调用前还是调用后都可以正常得进行调用不会报错。普通的函数声明会具有此特性而函数表达式则没有这个特性。因为函数表达式归根结底是一个表达式它和其它赋值表达式没有什么区别唯一的区别就是它把函数作为值赋给了变量。 闭包 闭包也是JS中比较重要的概念经常有人搞不清什么是闭包其实闭包的原理很简单就是指一个函数有权去访问另一个函数里的变量。闭包最常用的地方就是一个函数里边嵌套了另一个函数嵌套的函数使用了外边这个函数里的变量。在之前文章中讲过JS中的函数也是对象拥有自己的属性和方法。那这和作用域链有什么关系呢?其实作用域链就是嵌套函数对象的[Scope]属性存储了一份对外部函数对象的引用。而正是这份引用使得内部函数可以访问到外部函数的变量从而造就了闭包。在没有闭包的情况下随着函数的调用结束作用域链也会随之销毁但在使用闭包的时候外部函数仍然会随着调用结束而被销毁掉但是由于闭包作用域链中指向外部函数对象的引用并不会消失直到内部函数被销毁后才会被销毁。 闭包与变量 在使用闭包的时候内部函数只能取到外部函数变量的最后一个值。这是闭包的一个缺点。那为啥这样呢这是因为函数中的变量被存到了一个变量对象里边供内部函数访问。大家都知道放在对象里边的数据被称之为属性而正因为变成了属性所以内部函数访问的时候总是访问到最后一个值。解决方案就是能一个立即执行的匿名函数然后把值总是会变得变量当做参数传递进去。 关于this对象 在使用闭包的时候this指向也是一个问题。JS中函数是会绑定this的作为函数的函数this是指向Window作为方法的函数this是指向对象本身而在方法内部的函数因为是作为函数存在的因此它的this指向仍然是Window。如果把方法赋值给变量用这个变量调用的话它的this指向也是Window。而这一切的原因就是因为它们不再是方法而是作为函数存在。不过虽然存在这样的问题但是我们可以通过lamada表达式call、apply、bind、或定义变量存储this的方式来实现对方法this的访问。 内存泄漏转载于:https://www.cnblogs.com/wangyinqian/p/7904859.html