IIFE(立即调用函数表达式)最广泛的用途是避免污染全局作用域. 已经有很多JavaScript库和JavaScript高手正在使用这种技巧, 尤其是在最流行jQuery插件的开发者中. 你也应该把这个技巧应用在你的程序的主要文件中(main.js).
在这个例子中, 我使用了匿名函数把所有全局作用域的变量变成了局部变量, 所以现在全局作用域中还可以定义新的变量, 不用顾忌是否会和匿名函数内的变量在变量名上发生冲突(还包括其他库或者框架):
//所有的代码包含在立即调用函数中 (function() { var firstName = "Richard"; funtion init() { doStuff(firstName); //在这里开始插入应用程序的代码... } function doStuff() { //... } function doMoreStuff() { //... } //启动应用程序; init(); })();
强大的 && 和 || 表达式
你可能在JavaScript库和JavaScript框架中已经见过它们了, 那么我们先由几个基本的例子开始:
例子1. || (或)
设置默认值, 通常用
function documentTitle(theTitle) { if (!theTitle) { theTitle = "Untitled Document"; } }
替代
function documentTitle(theTitle) { theTitle = theTitle || "Untitled Document"; }
解析:
- 首先, 阅读以下的"提示"框复习JavaScript是如何判断布尔值的
- || 操作符首先从左开始判断表达式的真假, 如果为真, 马上返回左边表达式返回的值; 如果左边表达式被判断为假, 则继续判断右边的表达式, 并返回右边表达式的值
- 如果theTitle被判断为假, 会返回右边表达式的值. 换句话说, 如果theTitle变量被判断为真, 则返回theTitle的值.
! 提示: JavaScript判断为假的值: null, false, 0, undefined, NaN 和 ""(空字符串). 记住像Infinity(无限大)这种 NaN 类的值是被判断为真不是假. 然而, NaN被判断为假. 除了以上这些, 其他值全部被判断为真.
例子2. &&(并)
不要这么做:
function isAdult(age) { if (age && age > 17) { return true; } else { return false; } }
替代
function isAdult(age) { return age && age > 17; }
解析:
- && 操作符从左开始判断表达式, 如果左边的表达式被判断为假, 这马上返回false, 不管右边的表达式是否为真.
- 如果左边的表达式为真, 则继续判断右边的表达式, 然后返回右边表达式结果