2
(function(global, $data, undefined) {
   $data.Entity.extend('TodoDBModel.TodoItem', {
     'Id': { key:true,type:'Edm.Guid',nullable:false,required:true },
     'InSync': { type:'Edm.Boolean',nullable:false,required:true }
  });
})(window, $data);

这是简单的函数还是任何类型的类?

我们如何定义这些参数global, $data, undefined以及以函数右括号和参数结尾的最后一行代码(window, $data)

4

1 回答 1

6

它被称为IIFE - 立即调用的函数表达式。

引用维基百科:

立即调用的函数表达式(或 IIFE,发音为“iffy”)是一种 JavaScript 设计模式,它使用 JavaScript 的函数作用域生成词法作用域。立即调用的函数表达式可用于避免从块内提升变量,防止污染全局环境,同时允许公共访问方法,同时保留函数内定义的变量的隐私。这种模式被称为自执行匿名函数,但 Ben Alman 引入了术语 IIFE 作为该模式的语义更准确的术语。

这里发生的是您正在定义一个函数(通过函数表达式)并立即调用它。这提供了封装。

例如,如果有人要覆盖语言原始值类型undefined* 的值,它将把它作为第三个参数。它还提供对两个参数(数据,它是代码中的变量和window(浏览器中的全局对象)作为global.

* 说真的,有没有人真正覆盖 undefined ?此外,在现代浏览器中这是不可能的

这是一个更基本的示例:

(function(i){ // declare a function that accepts a single parameter - i
    alert(i);//alert the value of i
    // Next, we'll invoke the function we just declared with the value 5,
    // which means i will be 5 in the function
})(5); 
于 2013-06-22T16:02:23.190 回答