您现在的位置:首页 > 技术 > JavaScript知识笔记9:匿名函数

JavaScript知识笔记9:匿名函数

在jQuery源码中我们经常能看见各式各样的匿名函数,但是在我们实际JS代码操作过程中匿名函数使用却很少。我们更习惯去首先声明一个函数,在需要的时候调用,这样似乎才能更好的发挥函数的作用:提高代码复用率,让功能模块化。

2016年08月

透明伽然

通常我们会用使用以下两种方式创建函数:

                                               

前者会在代码执行前将函数加载带作用域,后者则是在代码执行到该行时才会有意义。这是因为function的执行优先级大于var

其中还存在另一个差别,前者是在函数声明时指定了一个名字,后者是将一个函数表达式赋值给一个变量,而这个函数表达式就是一个匿名函数。

jQuery源码中我们经常能看见各式各样的匿名函数,但是在我们实际JS代码操作过程中匿名函数使用却很少。我们更习惯去首先声明一个函数,在需要的时候调用,这样似乎才能更好的发挥函数的作用:提高代码复用率,让功能模块化。

这是我查阅很多资料了解到的之所以选用匿名函数的好处:

1.避免占用全局变量名。

这是一个简单的函数声明,函数外使用console.log()输出函数名,结果为:

之前说过this,这里的this指向window全局环境,那么myFunc函数自然就被解释为一个全局变量。这也解释了函数另一种等同的定义方式:

把上面的函数写成匿名函数,让其自调用执行:

输出结果:

例子很简单,但是描述了一个存在的现实。5是我们通过一段逻辑代码实现的结果,这段逻辑我们可以根据自己的不同需求进行编码,我们的目的就是通过这段逻辑代码获取到它的执行结果,但是逻辑只在特定的环境中使用,其他地方并不需要,所以我们选择匿名函数实现,这样在函数运行结束之后,不会再全局环境分配存储空间,那么自然谈不上污染了。

2.参数保护,函数是独立作用域,传递参数可以保护临时变量,闭包可以保存循环中需要保留的临时变量,还有组件开发时将命名空间传递到函数中用闭包保护起来,即使命名空间被后面的代码重置,原变量被闭包保护将仍然生存。

代码的输出结果依然是:

写完这个例子,似乎不太好,但是也能说明上述的理由2,有些牵强。

类似以上的方法在jQuery源码中很常见,以下是jQuery的封装代码:

其中关于define的使用,有这样的解释:define是在AMD规范中提及的一种模块化开发的关键字。通过这里的语句,我们也就不难理解jQuery支持AMD规范,其实也就是jQuery将自己封装成一个模块存在。

3.降低风险,因为没有变量名,中间代码又被闭包保护,js注入无法访问,减少被攻击风险。

因为我们没有更好的办法去调用匿名函数,匿名函数自调用,那么函数在解析的时候就会被调用,我们唯一可以获取到函数的返回值。其函数体一直都是独立存在并执行的,安全性自然很高。


订阅

欢迎订阅AnyForWeb出版物
欢迎订阅伽然出版物

栏目推荐

栏目推荐
JavaScript知识笔记9…

在jQuery源码中我们经常能看见各式各样…

栏目推荐
JavaScript知识笔记8…

函数的调用应该才是函数产生的根本,减…

栏目推荐
JavaScript知识笔记6…

在JS中使用操作符主要用来执行数学、相…

栏目推荐
JavaScript知识笔记5…

周知JS语法相对简单,语言结构简单,这…

栏目推荐
JavaScript知识笔记4…

JS相对于那些所谓重量级语言(C++、C#…

栏目推荐
JavaScript知识笔记3…

Javascript中this是一个指针概念,它表…

栏目推荐
JavaScript知识笔记2…

常见的变成语言Java、C#、C++等,同样…

AnyFroWebUED  

版权所有 © 2009-2016  沪ICP备14026814号-10

 

 

返回

很抱歉!

您现在还没有开通阅读权限,如有疑问,请联系我们。

联系电话:021-52047186

返回