12个简单(但强大)的JavaScript技巧(二)

2015-06-22  本文已影响0人  lozio

12个简单(但强大)的JavaScript技巧(二)

原文链接: 12 Simple (Yet Powerful) JavaScript Tips

其他链接: (译文)12个简单(但强大)的JavaScript技巧(一)

强大的立即调用函数表达式

(什么是立即调用函数表达式, 何时使用它)

IIFE (Immediately Invoked Function Expressions, 发音:“Iffy”)是立即调用函数表达式的缩写形式, 它的语法大概如下:

(function() {
  //Do fun stuff
})() 

这是一个立即调用的匿名函数, 它在JavaScript中有一些特别重要的作用.

它是如何工作的?

什么时候应该使用它?

  1. 避免污染全局作用域

    IIFE最广泛的用途是避免污染全局作用域. 已经有很多JavaScript库和JavaScript高手正在使用这种技巧, 尤其是在最流行jQuery插件的开发者中. 你也应该把这个技巧应用在你的程序的主要文件中(main.js).

    在这个例子中, 我使用了匿名函数把所有全局作用域的变量变成了局部变量, 所以现在全局作用域中还可以定义新的变量, 不用顾忌是否会和匿名函数内的变量在变量名上发生冲突(还包括其他库或者框架):

    //所有的代码包含在立即调用函数中
    (function() {
      var firstName = "Richard";
      funtion init() {
        doStuff(firstName);
        //在这里开始插入应用程序的代码...
      }
      
      function doStuff() {
        //...
      }
      
      function doMoreStuff() {
        //...
      }
      
      //启动应用程序;
      init();
    })();
    
  2. 用作条件选择器

    这种使用方式还没有被广泛所知, 但它是相当强大的. 你可以不调用一个命名函数来处理复杂的运算的.

    注意在三目运算符(.. ? .. : .. )中的两个匿名函数

    我尽可能多地加入空白来使语句看起来更容易理解

    var unnamedDocs = [],
        namedDocs = ['a_bridge_runover', 'great_dreamers'];
    
    function createDoc(documentTitle) {
      var documentName = documentTitle
      
      ?
      
      (function(theName) {
        var newNamedDoc = theName.toLocaleLowerCase().replace('', '_');
        nameDocs.push(newNamedDoc);
        
        return newNamedDoc;
      })(documentTitle)
      
      :
      
      (function() {
        var newUnnamedDoc = 'untitled_' + Number(namedDocs.length + 1);
        unnamedDocs.push(newUnnamedDoc);
        return newUnnamedDoc;
      })();
      
      return documentName;
    }
    
    createDoc('Over The Rainbow'); //over_the rainbow
    createDoc(); //untitled_4
    
上一篇下一篇

猜你喜欢

热点阅读