JavaScript基础教程之学习过程中遇到的问题:匿名函数
2018-03-07 00:50
369 查看
Write By Monkeyfly
以下内容均为原创,如需转载请注明出处。
如图所示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/e4c6b2565c917dd0abd04111139a3cba)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/8def5470df5e5701c61731cba0ef96b4)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/e421a9e1dfe85be744a579244f76c9cc)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/f65d3d1ce4fde0a6007bc0eae8b19cd2)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/c888ded02d07d6f2c3b9297312e7f8f8)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/6ed11d82e257714777c129de1faad6e2)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201803/07/a681dcfc95c712f897d1534509d50504)
以下内容均为原创,如需转载请注明出处。
前提
今天在做项目的时候,看到别人的js文件在使用匿名函数,我也就好奇的跟着用。但是我是在没有完全理解匿名函数的基础上使用它的,只知道它是一个自执行匿名函数,可以自动执行里面的内容,可用于页面的初始化。其他的就不太清楚了,并且学的还是比较肤浅的,因此就出了问题。问题
为什么把函数的定义写在匿名函数里面,在HTML页面中引用js文件的话,会提示该方法为not defined?但是相关的DOM操作写在匿名函数里面执行时却不受影响。
情景再现
很明显,在执行onlineCustomer()这个方法时,并没有在引入的js文件中找到该方法的定义,所以出错了。
如图所示
报错的方式:onlineCustomer() is not defined.
分析
没办法,只好去群里请教。//别人1:把这个方法拿出来就好了,不要放在那个匿名函数里面。 //别人1:这要从 js 的执行顺序开始说起。 //我:还是不明白。难道匿名函数中的方法,外面访问不到?
//别人1:你觉得这样能执行不。(如上图所示) //我:匿名函数 4000 不是自执行么? //别人2:作用域的原因。 //别人3:一语道破天机。 //别人4:执行完就被垃圾回收了。 //我:那是不是不建议写自执行匿名函数? //别人5:建议用啊,匿名函数就是用来避免全局污染。只是你这里不适用而已。 //别人1:那我们再来看。(如下图示)
//别人1:那你觉得这样它弹出什么? //别人6:你把函数对外暴露就能调了。 //我:自己在控制台写了一段代码测试了一下,结果(如下图示)。
//我:明白了 //别人7: 绑定事件为啥要弄匿名函数。 //我:我看别人代码里面就是这么写的,然后我就用了。 //别人6:我拥抱着爱 当从梦中醒来。
//然后我拿出来别人写的代码,进行比对 (function(){ getAddress(); })(); function getAddress(){ //code... };
//别人2:你学反了。人家函数在外面,里面调用。你呢? //别人8:牛皮,牛批... //别人5:你真要这么干其实也有方法做到。 //别人5:有一个恶心的办法,可以让你在匿名函数里触发这个点击事件,在匿名函数里面把function直接绑到window上就好了,不过这样写一般都会被骂死。 //我:看来我水平还差得很远。 //别人5:发来一张图。(如下图示)
//我:厉害了! //别人1:发来一张图。(如下图示)
//别人1:骚操作。 //别人5:这种操作被你大佬看到绝壁骂死。
改正
方法其实很简单,只需要将自定义的方法放在匿名函数的外面就可以了。//错误写法 <script> (function(){ //定义函数 function myFunction(){ console.log(""); }; })(); //执行函数 myFunction(); </script>
//正确写法 <script> (function(){ //执行函数 myFunction(); })(); //定义函数 function myFunction(){ console.log(""); }; </script>
相关文章推荐
- JavaScript基础教程之学习过程中遇到的问题:匿名函数
- 学习AJAX过程中遇到的一些问题
- jsp 菜鸟学习过程中遇到的页面逻辑,解耦等问题
- Android学习过程中遇到的问题及解决方法
- grails 学习过程中遇到的一些问题
- SSH AOP 学习过程中遇到的问题...
- ExtJS学习过程中遇到的问题笔记
- Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版 在用rails3.2学习过程中遇到的问题及解决方法
- lamp使用php处理上传文件,调用move_uploaded_file函数遇到目录写权限问题及解决过程
- grails 学习过程中遇到的一些问题
- Fragment的使用与学习及使用过程中遇到的问题
- 在学习Hibernate过程中遇到的问题! - the owning Session was closed
- Makefile学习过程中遇到的问题
- Extj4 学习过程中遇到的问题
- 学习ASP过程中,遇到的几个问题
- 从今天起,我要记录学习过程中遇到的所有问题
- 第一篇博文 完全用来记录自己学习过程中遇到的问题
- [项目过程中所遇到的各种问题记录]学习篇——对工作以来的学习过的开源项目进行总结—动软代码生成工具
- 在学习过程中遇到的问题
- WTL学习过程中遇到的一些问题总结