你不知道的javascript读书笔记(上)------第三章
2018-05-14 本文已影响0人
guojiaxing
函数中的作用域函数的全部变量可以在整个函数的范围内使用及复用,在嵌套的作用域中也可以使用。
隐藏内部实现(隐藏变量和函数)
通俗理解的话就是
将可以打包放在一起的尽量放在一个函数里面
![](https://img.haomeiwen.com/i10142034/cdcf1a19af12ddd6.png)
这样做的好处是避免同名标识符之间的冲突
全局命名空间
这个对象被用作库的命名空间,所有需要暴露给外界的功能都会成为这个对象的属性,而不是将自己的标识符暴露在顶级的词法作用域中。
![](https://img.haomeiwen.com/i10142034/fbfdaf6a6cd7914b.png)
模块管理
函数作用域
![](https://img.haomeiwen.com/i10142034/45f78762c0ca8aaa.png)
函数匿名的缺点:
1.在栈追踪中不会显示出有意义的函数名,调试困难。
2.没有函数名,在需要引用自身的时候(比如在递归和事件触发后事件监听器需要解绑自身)只能使用已经过期的argument.callee引用
3.匿名函数失去了代码可读性/可理解性等优点行内函数表达式会解决上述问题。
![](https://img.haomeiwen.com/i10142034/787ca0ef31b1e316.png)
立即执行函数表达式 IIFE(Immediately Invoked Function Expression)
(function(){})() 或者 (function(){..}())
第一个()将函数编程表达式,第二个()执行了这个函数
![](https://img.haomeiwen.com/i10142034/a993c885cd47f14f.png)
这一模式应用场景是
1.解决undefined标识符的默认值被错误覆盖导致的异常
![](https://img.haomeiwen.com/i10142034/c181fc45e47ad22b.png)
2.倒置代码的运行顺序,将需要运行的函数放在第二位,在IIFE执行之后当作参数传递进去。
![](https://img.haomeiwen.com/i10142034/55c045ff9481e8a2.png)